C++ 如何在CMakeLists.txt中正确设置CMake标志

C++ 如何在CMakeLists.txt中正确设置CMake标志,c++,cmake,C++,Cmake,设置选项和CMake变量并将它们传播到CMake GUI时遇到问题 例如,以下行位于我的CMakeLists.txt文件中: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tR -DPOCO_DLL") message("CMake flags: " ${CMAKE_CXX_FLAGS}) 在CMake GUI中运行configure时,它会打印“CMake标志:-tM-tR-DPOCO_DLL”,表明设置CMake_CXX_标志“有效” 但是,GUI不会

设置选项和CMake变量并将它们传播到CMake GUI时遇到问题

例如,以下行位于我的CMakeLists.txt文件中:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tR -DPOCO_DLL")
message("CMake flags: " ${CMAKE_CXX_FLAGS}) 
在CMake GUI中运行configure时,它会打印“CMake标志:-tM-tR-DPOCO_DLL”,表明设置CMake_CXX_标志“有效”

但是,GUI不会得到更新,只在CMAKE_CXX_标志行上显示“-tM”


在CmakeList文件中设置这些CMAKE选项以便将它们传播到CMAKE GUI的正确方法是什么?

诀窍是在
项目(…)
语句之前设置
CMAKE\u CXX\u标志。但这还不够;您还需要将其放入缓存中

此外,如果您计划支持从命令行界面和/或
-C
cmake选项(locad初始缓存)对其进行初始设置,则需要强制将其放入缓存中,如图所示:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tR -DPOCO_DLL" CACHE STRING "Default CXX options" FORCE)
...
...
project(MyProject)
....
另一方面,要非常小心,因为您在设置命令行选项时对编译器一无所知,这是在执行
project
语句时默认确定的

隐式地,这将使您的
CMakeLists.txt
依赖于编译器

最后,这里是关于