cmake - project(...) 如何影响变量?
问题描述
我最近偶然发现了以下不错的 cmake 功能:
https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT.html
将以下代码段另存为 CMakeLists.txt,运行mkdir build; cd build
:
cmake_minimum_required(VERSION 3.12)
message(STATUS "CMID: ${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}")
project( test )
执行该片段不会输出真正的变量:
➜ build /usr/bin/rm -rf *; cmake ../ | grep CMID
-- CMID:
现在,如果您更改该代码段:
cmake_minimum_required(VERSION 3.12)
project( test )
message(STATUS "CMID: ${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}")
执行会产生结果,我期望从文档中得到:
➜ build /usr/bin/rm -rf *; cmake ../ | grep CMID
-- CMID: 1
所以我想知道,命令的相对位置如何project( ... )
改变该变量?
解决方案
project()
call 设置了许多 CMake 变量,而CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT就是这样的变量之一。
因此,对于许多 CMake 命令和变量的访问,将它们放置在project()
调用之前或之后是至关重要的。
在大多数情况下,project()
调用应该在使用其他命令和变量之前。
如果您正在寻找一种从 更改默认安装前缀的方法CMakeLists.txt
,请参阅我的回答:https ://stackoverflow.com/a/39485990/3440745 。
推荐阅读
- python - 我的 Viber 机器人工作速度很慢(Python)我怎样才能让它更快
- javascript - 使 Chrome 扩展 javascript 文档适用于打开网页,而不是弹出
- javascript - 如何为 LightningChartJs 启用默认浏览器滚动行为?
- node.js - "message": "ENOENT: 没有这样的文件或目录,打开 'E:\\astrology\\utils\\uploads\\1600798534862qf.png'"
- reactjs - 部署在heroku上的反应项目是空白的
- mongodb - mongoDB mapReduce 中的 finalize 函数是否并行处理不同的键?
- java - DateTimeFormatter 不使用阿拉伯语或孟加拉语的本地数字
- python - 如何从新的 Twitter 的 API 中获取 3200 条推文以及 GetOldTweets3 替代方案是什么?
- r - 是否有用于绘制竞争风险的加权 (IPTW) 累积发生率曲线的 R 函数?
- reactjs - 确认浏览器后退按钮