Migración del entorno de desarrollo para usar CMake + Git

Actualmente estoy tratando de aprender las mejores prácticas para el desarrollo multiplataforma para permitir una mejor productividad en proyectos futuros. Empecé con una configuration básica usando la terminal Unix tanto en OS X como en Linux. Luego utilicé una combinación de un entorno Cygwin con el comstackdor MinGW GCC en Windows. Todo se gestionó a partir de un file MAKE universal (ver a continuación) que utilizaría rsync como una forma básica de control de versiones que se vinculaba a un repository central.

Mi estructura de directory de proyecto actual es:

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 

y el file MAKE se ve así:

 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) 

Esto está bien para cualquier proyecto básico pero tiene problemas y me gustaría, por ejemplo, usar MSVC dentro de Windows en lugar de GCC. Realmente agradecería cualquier consejo sobre las configuraciones del entorno y los flujos de trabajo / herramientas para usar.

Preferiblemente me gustaría:

  • Para usar comstackdores nativos para cada sistema (Win: MSVC, Mac: Clang, Lin: GCC).
  • Una configuration básica de CMake que funcionaría con mi estructura de files actual, ¿es esto posible?
  • Trabaja desde un shell de commands que puede ejecutar Git (en lugar de rsync), CMake y usar el file generado para build un ejecutable. Preferiblemente utilizando commands Unix en lugar de DOS.

Todo esto es bastante simple cuando se usan sistemas basados ​​en * nix, pero con windows, por ejemplo, ¿podría usar Git Bash sin utilizar el símbolo del sistema de Visual Studio para ejecutar un makefile / ninja que use cl.exe? ¿O sería mejor simplemente usar un .vcprog?

Sí, esto es muy factible y, de hecho, bastante directo.

Todo lo que desee debe estar cubierto por los ejemplos básicos de cmake.

Una nota en sus carpetas de compilation: esas no deberían ser parte de su tree fuente. En su lugar, debe copyr todos los files de resources desde una location en su tree de origen a su carpeta de compilation.