目前使用gcc何时改变编译器标志,我编辑的构建目标的CMakeLists.txt:
if (UNIX)
add_definitions(-Wall)
add_definitions(-g)
#add_definitions(-O2)
endif (UNIX)
这个问题是混帐拿起变化。 如果我继续和犯这种变化,我会惹恼了其他开发商谁想到用-02而不是-g但他们把我的版本时,他们拉不相关的更改。 通常情况下,我可以排除我提交这种变化,但是当我做对的CMakeLists.txt文件的实际变化,有没有办法避免推高了我的编译标志的个人选择。
有没有办法告诉CMake的创建在build /目录中的文件(具体到每一个工作拷贝,因此每个开发者),一个个人可以修改自己的心脏的欲望不接触的项目文件(一切,但建/)。 当然,我们的构建/不承诺Git仓库。
这可能是有益的注意,使用的,而不是GCC的Visual Studio时,该IDE通过其UI它修改编译/中VS解决方案文件处理这对我们来说。 问题是,我们有没有这样的机制,使用GNU Makefile文件时。
我们的项目组织是这样的:
ourproject/
bin/
build/ <-- CMake-generated stuff goes here
lib/
src/
abuildtarget/
anotherbuildtarget/
source.cpp
source.h
CMakeLists.txt
您在这里不正确使用CMake进行。 该add_definitions
功能不添加编译器选项,就像你正在做的; 相反,它是添加预处理器的定义如add_definitions(-DDEBUG)
你想要做的是设置什么CMAKE_<language>_FLAGS
当配置所需的选项。 如果你还需要一套标准,然后放进了文件的CMakeLists.txt如:
if(${CMAKE_Fortran_COMPILER_ID} STREQUAL "Intel")
set(CMAKE_Fortran_FLAGS_RELEASE "-O2 -xhost" CACHE STRING "" FORCE)
set(CMAKE_Fortran_FLAGS_NODEBUG "-O0" CACHE STRING "" FORCE)
mark_as_advanced(CMAKE_Fortran_FLAGS_NODEBUG)
set(CMAKE_Fortran_FLAGS_PROFILING "-O2 -xhost -p" CACHE STRING "" FORCE)
mark_as_advanced(CMAKE_Fortran_FLAGS_PROFILING)
set(CMAKE_Fortran_FLAGS_DEBUG
"-DDEBUG -g -check noarg_temp_created -C -traceback" CACHE STRING "" FORCE)
endif()
凡Fortran
可以被替换CXX
或C
。
在这种情况下, CMAKE_<language>_FLAGS_<build type>
设置基于标志CMAKE_BUILD_TYPE
变量。 如果它被设置为Release
,然后它使用CMAKE_Fortran_FLAGS_RELEASE
。 我们增加了一些其他可能的构建类型。 如果用户想要的东西,是不是标准的构建类型中的一种,那么他们设置CMAKE_<language>_FLAGS
在配置时为所欲为,它覆盖的生成类型设置和使用用户定义的标志来代替。
虽然几乎可以肯定的利用更好的方法cmake
解决你的问题,你的问题,这部分是很容易解决的:
但是当我做对的CMakeLists.txt文件的实际变化,有没有办法避免推高了我的编译标志的个人选择。
如果你提交你的具体的个人文件更改到你的本地库,即使这样你既可以这是唯一真正的git-revert
,当你打个补丁推,或者用你之间的过滤器development
和ready-to-push-to-other-developers
的分支-粗糙的想法,可以发现在这里 ,但你必须非常严重编辑从问题例如删除有问题的个人行。
一个更好的选择的话,是不提交个人的变化。 从答案在这里 ,你可以很容易地提交到一个文件中的具体变化。
一个需要注意的一点,然而,就是你会得到一个永久脏活树结束了,如果你有一个非忽略的文件提交的修改; 这可能会或可能不会是一个问题,根据您的工作流程合并等。