2014-07-20 31 views
0

目前我正在尝试学习跨平台开发的最佳实践,以便在将来的项目中提高生产力。我开始在OS X和Linux上使用unix终端进行基本设置。然后,我在窗口上使用了Cygwin环境与MinGW GCC编译器的组合。然后,所有东西都从一个通用的makefile文件(参见下文)中进行管理,该文件将使用rsync作为链接到中央存储库的基本版本管理形式。将开发环境迁移到使用CMake + Git

我目前的项目目录结构是:

project_root 
    include 
    src 
    makefile 
    platform 
    win 
     build 
     resources (Media) 
     shaders (GLSL Shaders) 
     include (platform specific include) 
     lib (platform specific libraries) 
     object 
    mac 
     build 
     resources 
     shaders 
     include 
     lib 
     object 
    resources 
    shaders 

和makefile文件看起来像:

PROJECT_NAME := craft 


UNAME := $(shell uname) 

OS_TYPE  := WINDOWS 
EXE   := .exe 
DIR   := win 
LDFLAG  := -Wall -g -std=c++11 -mwindows -static -L../platform/$(DIR)/lib -lstdc++ -lgdi32 -lglew -lglfw3 -lopengl32 
CXXINCLUDE := -I../platform/$(DIR)/include 
LD   := i686-w64-mingw32-gcc 
CXX   := i686-w64-mingw32-gcc 

ifeq ($(UNAME), Darwin) 
OS_TYPE  := MACINTOSH 
EXE   := 
DIR   := mac 
LDFLAG  := -Wall -g -std=c++11 -L../platform/$(DIR)/lib -lstdc++ -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo 
CXXINCLUDE := -I../platform/$(DIR)/include 
LD   := clang 
CXX   := clang 
endif 

CXXFLAG  := -Wall -g -I../include 
CU   := nvcc 
CPP_FILES := $(wildcard *.cpp) 
OBJ_FILES := $(CPP_FILES:.cpp=.o) 

all: build 

build: $(OBJ_FILES) 
    $(LD) -o ../platform/$(DIR)/build/[email protected]$(EXE) $(addprefix ../platform/$(DIR)/object/, $^) $(LDFLAG) 

%.o: %.cpp 
    $(CXX) -o ../platform/$(DIR)/object/[email protected] -c $< $(CXXFLAG) $(CXXINCLUDE) 

platform: 
    echo $(OS_TYPE) 

clean: clobject 
    rm -rf ../platform/$(DIR)/build/build$(EXE) 

clobject: 
    rm -rf ../platform/$(DIR)/object/*.o 

resources: 
    rsync -va --delete ../resources ../platform/$(DIR)/build/ 

shaders: 
    rsync -va --delete ../shaders ../platform/$(DIR)/build/ 

run: 
    ../platform/$(DIR)/build/build$(EXE) 

send: 
    rsync -va --delete $(DEV)/$(PROJECT_NAME) $(DEV_MASTER) 

get: 
    rsync -va --delete $(DEV_MASTER)/$(PROJECT_NAME) $(DEV) 

这是罚款的任何基本的项目,但它确实有问题,我想为例子,在Windows中使用MSVC而不是GCC。我真的很感激任何有关环境设置和工作流程/工具的建议吗?

最好,我想:

  • 用于每个系统的本地编译器(WIN:MSVC,苹果:锵,林:GCC)。
  • 一个基本的CMake设置,可以与我当前的文件结构一起工作,这可能吗?
  • 从一个可以运行Git(而不是rsync)的命令shell工作,CMake并使用生成的文件构建可执行文件。最好使用unix命令而不是DOS。

这一切都是相当简单的使用* nix的基础系统,但与例如窗户的时候,我可以使用的Git的Bash不使用Visual Studio命令提示符运行生成文件/忍者使用cl.exe时?或者使用.vcprog会更好吗?

回答

1

是的,这是非常可行的,实际上非常简单。

你想要的一切应该包括在基本的cmake例子中。

有关构建文件夹的注意事项: 这些不应该是源代码树的一部分。相反,您应该将源树中某个位置的所有资源文件复制到build文件夹中。

+0

我几乎已经转换它了,我明白,如果声明仍然是必要的平台。当你习惯了find_package/libraries命令时,这很容易。我也从src中取出了build目录,这使得它可以更好地推送到github,干杯。 – josh247