目前我正在嘗試學習跨平臺開發的最佳實踐,以便在將來的項目中提高生產力。我開始在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