目前我正在尝试学习跨平台开发的最佳实践,以便在将来的项目中提高生产力。我开始在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会更好吗?
我几乎已经转换它了,我明白,如果声明仍然是必要的平台。当你习惯了find_package/libraries命令时,这很容易。我也从src中取出了build目录,这使得它可以更好地推送到github,干杯。 – josh247