Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迁移开发环境以使用CMake+;吉特_C++_Git_Cmake_Cross Platform_Development Environment - Fatal编程技术网

C++ 迁移开发环境以使用CMake+;吉特

C++ 迁移开发环境以使用CMake+;吉特,c++,git,cmake,cross-platform,development-environment,C++,Git,Cmake,Cross Platform,Development Environment,目前,我正在努力学习跨平台开发的最佳实践,以便在未来的项目中提高生产率。我首先在OSX和linux上使用unix终端进行了基本设置。然后,我将Cygwin环境与windows上的MinGW GCC编译器结合使用。然后从一个通用makefile(见下文)管理所有内容,该文件将rsync用作链接到中央存储库的基本版本控制形式 我当前的项目目录结构是: project_root include src makefile platform win build

目前,我正在努力学习跨平台开发的最佳实践,以便在未来的项目中提高生产率。我首先在OSX和linux上使用unix终端进行了基本设置。然后,我将Cygwin环境与windows上的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
生成文件如下所示:

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)
项目名称:=craft
UNAME:=$(shell UNAME)
操作系统类型:=WINDOWS
EXE:=.EXE
迪尔:=胜利
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),达尔文)
操作系统类型:=麦金塔
EXE:=
DIR:=mac
LDFLAG:=-Wall-g-std=c++11-L../platform/$(DIR)/lib-lstdc++-lglfw3-framework cococoa-framework OpenGL-framework IOKit-framework CoreVideo
CXXINCLUDE:=-I../platform/$(DIR)/include
LD:=叮当声
CXX:=叮当声
恩迪夫
CXXFLAG:=-Wall-g-I../include
CU:=nvcc
CPP_文件:=$(通配符*.CPP)
对象文件:=$(CPP文件:.CPP=.o)
全部:构建
生成:$(OBJ_文件)
$(LD)-o../platform/$(DIR)/build/$@$(EXE)$(addprefix../platform/$(DIR)/object/,$^)$(LDFLAG)
%.o:%.cpp
$(CXX)-o../platform/$(DIR)/object/$@-c$<$(CXXFLAG)$(CXXINCLUDE)
站台:
echo$(操作系统类型)
清洁:clobject
rm-rf../platform/$(DIR)/build/build$(EXE)
clobject:
rm-rf../platform/$(DIR)/object/*.o
资源:
rsync-va--删除../resources../platform/$(DIR)/build/
着色器:
rsync-va--删除../shaders../platform/$(DIR)/build/
运行:
../platform/$(DIR)/build/build$(EXE)
发送:
rsync-va--删除$(开发)/$(项目名称)$(开发主机)
获取:
rsync-va--删除$(开发主机)/$(项目名称)$(开发)
这对于任何基本项目都是好的,但它确实有问题,例如,我希望在windows中使用MSVC而不是GCC。如果您能提供有关环境设置和工作流程/工具的建议,我将不胜感激

我希望:

  • 为每个系统使用本机编译器(Win:MSVC、Mac:Clang、Lin:GCC)
  • 一个基本的CMake设置可以与我当前的文件结构一起工作,这可能吗
  • 使用一个可以运行Git(而不是rsync)的命令shell,CMake并使用生成的文件构建可执行文件。最好使用unix命令而不是DOS

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

是的,这非常可行,而且实际上非常简单

基本的cmake示例应该涵盖您想要的一切

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

我现在几乎已经转换了它,我理解平台if语句仍然是必需的。当您习惯了find_u包/库命令时,这很容易。我还从src中删除了build目录,这使得推送到github更加简洁,干杯。