迁移开发环境以使用CMake + Git

时间:2014-07-20 16:03:07

标签: c++ git cmake cross-platform development-environment

目前,我正在努力学习跨平台开发的最佳实践,以便在未来的项目中实现更高的生产力。我开始使用OS X和Linux上的unix终端进行基本设置。然后我在Windows上使用了Cygwin环境和MinGW GCC编译器的组合。然后通过一个通用的makefile(见下文)来管理所有内容,它将使用rsync作为链接到中央存储库的版本控制的基本形式。

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

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/$@$(EXE) $(addprefix ../platform/$(DIR)/object/, $^) $(LDFLAG)

%.o: %.cpp
    $(CXX) -o ../platform/$(DIR)/object/$@ -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,Mac:Clang,Lin:GCC)。
  • 可以使用我当前文件结构的基本CMake设置吗?
  • 从一个可以运行Git(而不是rsync)的命令shell开始工作,CMake并使用生成的文件来构建可执行文件。最好使用unix命令而不是DOS。

这在使用基于* nix的系统时非常简单,但是使用Windows,我可以使用Git Bash而不使用Visual Studio命令提示符来运行使用cl.exe的makefile / ninja吗?或者只使用.vcprog会更好吗?

1 个答案:

答案 0 :(得分:1)

是的,这是非常可行的,实际上非常直接。

基本的cmake示例应涵盖您想要的所有内容。

关于构建文件夹的说明: 那些不应该是你的源代码树的一部分。相反,您应该将源树中某个位置的所有资源文件复制到构建文件夹中。