В настоящее время я пытаюсь изучить передовую практику для кросс-платформенной разработки, чтобы обеспечить лучшую производительность в будущих проектах. Я начал с базовой установки, используя терминал unix на OS X и Linux. Затем я использовал комбинацию среды Cygwin с компилятором MinGW GCC для окон. Затем все было создано из универсального make файла (см. Ниже), который использовал бы 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
и make файл выглядит так:
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)
Это нормально для любых базовых проектов, но у него есть проблемы, и я хотел бы, например, использовать MSVC в окнах, а не в GCC. Я был бы очень признателен за любые советы по настройке среды и рабочим процессам/инструментам для использования?
Желательно я хотел бы:
Это довольно просто при использовании систем на основе nix, но, например, с окнами, можно ли использовать Git Bash без использования Visual Studio Command Prompt для запуска makefile/ninja, который использует cl.exe? Или было бы лучше просто использовать.vcprog?
Да, это очень удобно и на самом деле довольно прямолинейно.
Все, что вы хотите, должно быть охвачено основными примерами cmake.
Заметка о ваших папках сборки: они не должны быть частью вашего исходного дерева. Вместо этого вы должны скопировать все файлы ресурсов из местоположения в исходное дерево в свою папку сборки.