首页 > 解决方案 > 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( ... )改变该变量?

标签: cmake

解决方案


project()call 设置了许多 CMake 变量,而CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT就是这样的变量之一。

因此,对于许多 CMake 命令和变量的访问,将它们放置在project()调用之前或之后是至关重要的。

在大多数情况下,project()调用应该使用其他命令和变量之前。


如果您正在寻找一种从 更改默认安装前缀的方法CMakeLists.txt,请参阅我的回答:https ://stackoverflow.com/a/39485990/3440745 。


推荐阅读