首页 > 解决方案 > 如何在 CMakeLists.txt 中正确设置 CMake 标志

问题描述

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

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

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tR -DPOCO_DLL")
message("CMake flags: " ${CMAKE_CXX_FLAGS}) 

在 CMake GUI 中运行配置时,它会打印“CMake flags: -tM -tR -DPOCO_DLL”,表明设置 CMAKE_CXX_FLAGS“有效”。

然而,GUI 不会更新,仅在 CMAKE_CXX_FLAGS 行上显示“-tM” 。

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

标签: c++cmake

解决方案


诀窍是在声明CMAKE_CXX_FLAGS 之前设置。 project(...)但这还不够;您还需要将其放入缓存中。

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

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tR -DPOCO_DLL" CACHE STRING "Default CXX options" FORCE)
...
...
project(MyProject)
....

另一方面,要非常小心,因为您正在设置命令行选项,此时您对编译器一无所知,这是默认情况下在执行project语句期间确定的。

隐含地,这会使您的CMakeLists.txt编译器依赖。

最后,这里是关于set cmake 命令的文档


推荐阅读