具体到本地工作副本的CMake编译器设置(CMake compiler settings speci

2019-10-16 14:14发布

目前使用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

Answer 1:

您在这里不正确使用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可以被替换CXXC

在这种情况下, CMAKE_<language>_FLAGS_<build type>设置基于标志CMAKE_BUILD_TYPE变量。 如果它被设置为Release ,然后它使用CMAKE_Fortran_FLAGS_RELEASE 。 我们增加了一些其他可能的构建类型。 如果用户想要的东西,是不是标准的构建类型中的一种,那么他们设置CMAKE_<language>_FLAGS在配置时为所欲为,它覆盖的生成类型设置和使用用户定义的标志来代替。



Answer 2:

虽然几乎可以肯定的利用更好的方法cmake解决你的问题,你的问题,这部分是很容易解决的:

但是当我做对的CMakeLists.txt文件的实际变化,有没有办法避免推高了我的编译标志的个人选择。

如果你提交你的具体的个人文件更改到你的本地库,即使这样你既可以这是唯一真正的git-revert ,当你打个补丁推,或者用你之间的过滤器developmentready-to-push-to-other-developers的分支-粗糙的想法,可以发现在这里 ,但你必须非常严重编辑从问题例如删除有问题的个人行。

一个更好的选择的话,是不提交个人的变化。 从答案在这里 ,你可以很容易地提交到一个文件中的具体变化。

一个需要注意的一点,然而,就是你会得到一个永久脏活树结束了,如果你有一个非忽略的文件提交的修改; 这可能会或可能不会是一个问题,根据您的工作流程合并等。



文章来源: CMake compiler settings specific to the local working copy
标签: cmake