【问题标题】:Remove default flags on cmake删除 cmake 上的默认标志
【发布时间】:2013-06-02 16:06:02
【问题描述】:

以下CMakeLists.txt

 SET(CMAKE_CXX_FLAGS "/DWIN32")
 SET(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS})
 add_executable(hello hello.cpp)

结束运行

 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe /c /nologo /W1 /WX- /O2 /Ob2 /D WIN32 /D NDEBUG /D "CMAKE_INTDIR=\"Release\"" /D _MBCS /Gm- /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"hello.dir\Release\\" /Fd"C:/Users/monso/code/playground/cmakeworld/build/Release /hello.pdb" /Gd /TP /errorReport:queue ..\hello.cpp

带有标志/c /nologo /W1 /WX- /O2 /Ob2 /D WIN32 /D NDEBUG

如何删除它们以放入我自己的?设置CMAKE_CXX_FLAGS 附加我放置的任何标志(例如/w)。在set 调用之前和之后打印CMAKE_CXX_FLAGS 确实会更改其值。

【问题讨论】:

  • 看起来CMake总是添加一些基本标志。除了用相同标志的不同选项替换它们(例如,设置/W0 以摆脱/W1)之外,没有其他方法可以删除它们。
  • @Fraser Wah,这对我来说似乎是一个基本而简单的功能。好吧,好吧。那就没有成功。不过还是谢谢。

标签: visual-c++ cmake flags


【解决方案1】:

CMake 为每种构建类型使用不同的变量。它们被称为CMAKE_CXX_FLAGS_<BUILDTYPE>CMAKE_C_FLAGS_<BUILDTYPE>

所以,对于 CXX,这将是

CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_MINSIZEREL

另外,它使用“通用”变量CMAKE_CXX_FLAGSCMAKE_C_FLAGS中的设置

因此,为了摆脱默认值,您需要设置全局或特定变量并清除另一个(或根据需要配置它们)。

注意:如果您想在缓存中进行这些更改,您需要使用FORCE 参数。否则,他们将在本地受雇于该项目及其子项目。

【讨论】:

    【解决方案2】:

    使用 set_target_property。

    add_executable(help
                   helpMe.cpp
    )
    get_target_property(LOVE PROPERTIES COMPILE_FLAGS)
    message("Target Compiler flags are: ${MAIN_CFLAGS}")
    
    set_target_properties(LOVE PROPERTIES COMPILE_FLAGS "")
    get_target_property(LOVE PROPERTIES COMPILE_FLAGS)
    message("Target Compiler flags are: ${MAIN_CFLAGS}")
    

    它会起作用的。

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      相关资源
      最近更新 更多