7

以下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例如)。CMAKE_CXX_FLAGS在调用之前和之后打印set确实会更改其值。

4

2 回答 2

4

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参数。否则,他们将在本地受雇于该项目及其子项目。

于 2014-02-27T14:21:22.323 回答
0

使用 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}")

它会起作用的。

于 2020-06-03T08:54:20.593 回答