c++ - 如何在 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 的正确方法是什么?
解决方案
诀窍是在声明CMAKE_CXX_FLAGS
之前设置。 project(...)
但这还不够;您还需要将其放入缓存中。
此外,如果您计划支持从命令行界面和/或-C
cmake 选项(locad 初始缓存)进行初始设置,则需要强制将其放入缓存中,如下所示:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -tR -DPOCO_DLL" CACHE STRING "Default CXX options" FORCE)
...
...
project(MyProject)
....
另一方面,要非常小心,因为您正在设置命令行选项,此时您对编译器一无所知,这是默认情况下在执行project
语句期间确定的。
隐含地,这会使您的CMakeLists.txt
编译器依赖。
最后,这里是关于set cmake 命令的文档
推荐阅读
- c# - scriptcs 总是给出一个错误,说我应该使用系统库来终止程序
- java - 如何通过编辑配置文件在eclipse中初始化tomcat服务器
- python - Killall Postgres 使用 Heroku Scheduler 卡住连接
- angular - 使用 ViewEncapsulation.ShadowDom 元素包裹的元素内的 cdkScrollable 和 cdkDropList 问题
- javascript - 检测用户何时使用 React js 滚动到 div 的底部取决于屏幕/chrome 分辨率
- typescript - facebook SDK 嵌入式帖子仅在硬重新加载时显示
- python - Python 中是否有相当于 convmtx2() 的东西?
- swift - Swift:CMTimeRange 需要帮助(开始:结束 :)
- python - 以 <> 形式提供烧瓶参数会产生 404?
- c - 在 c 中使用 qsort 对结构进行排序时解决边界错误