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

How to properly set CMake flags in CMakeLists.txt

本文关键字:设置 CMake 标志 CMakeLists txt      更新时间:2023-10-16

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

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

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

在 CMake GUI 中运行配置时,它会打印">CMake 标志:-tM -tR -DPOCO_DLL">,表示设置CMAKE_CXX_FLAGS"有效"。

但是,GUI 不会更新,仅在CMAKE_CXX_FLAGS行上显示"-tM"。

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

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

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

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

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

隐式地,这会使CMakeLists.txt编译器依赖于。

最后,这是关于设置 cmake 命令的文档