Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';导出CMAKE_PREFIX_PATH=。。。?_Cmake - Fatal编程技术网

什么';导出CMAKE_PREFIX_PATH=。。。?

什么';导出CMAKE_PREFIX_PATH=。。。?,cmake,Cmake,当google ing导出CMAKE_PREFIX_PATH时,您通常会发现通过设置环境变量来解决CMAKE找不到这个或那个包的问题的建议: export CMAKE_PREFIX_PATH=/path/to/package 我确信设置这个环境变量的效果是将/path/to/package添加到CMake调用中指定的路径列表中,使用 cmake -DCMAKE_PREFIX_PATH="/path/to/package1;..." . (我已经在macOS Catalina和Ubuntu 1

当google ing
导出CMAKE_PREFIX_PATH
时,您通常会发现通过设置环境变量来解决CMAKE找不到这个或那个包的问题的建议:

export CMAKE_PREFIX_PATH=/path/to/package
我确信设置这个环境变量的效果是将
/path/to/package
添加到CMake调用中指定的路径列表中,使用

cmake -DCMAKE_PREFIX_PATH="/path/to/package1;..." .
(我已经在macOS Catalina和Ubuntu 18.04上分别使用CMake 3.15.5和3.16.0进行了尝试。)

文档中没有提到这些。事实上,它只是说:

默认情况下,此[
CMAKE\u PREFIX\u PATH
]为空。拟由本项目设置

(见附件)。这里没有提到设置环境变量的效果

这提出了两个问题:

  • 设置环境变量是否会产生这种效果?记录在哪里?这是向环境中生成的所有项目添加前缀路径的规范方法吗

  • 正如文档所说,“它[
    CMAKE_PREFIX_PATH
    ]是由项目设置的”。有什么理由不应该设置默认的
    CMAKE_PREFIX_路径


默认情况下,将其设置为环境变量的效果是无效的。CMake在CMake项目根目录中名为CMakeCache.txt的文件中定义自己的变量(使用set()命令或-D命令行参数设置的变量)。这些变量将影响cmake脚本

为了访问CMake中的环境变量,需要指定

因此,即使您设置了CMAKE_PREFIX_PATH环境变量,除非您在CMakeLists.txt中显式使用它,否则它也不会有任何效果


(编辑:我仅使用CMake 3.16.3在Windows 10上验证了此行为)

“默认情况下,将其设置为环境变量的效果是无效的。”您对此有参考吗?正如我在问题中提到的,我已经验证了在Linux和macOS下,使用
-DCMAKE\u PREFIX\u PATH
指令将环境变量的值附加到列表集。。您观察到的行为似乎与操作系统有关,因为我无法在Windows上复制它。太好了,谢谢那么,如何告诉CMake使用某个路径作为所有项目的前缀路径呢?到目前为止,我看到的唯一方法是使用custum初始缓存生成项目。为了实现这一点,可以使用-C选项运行generation命令,从而生成初始缓存文件。例如,假设您设置了文件default-cache.cmake,其内容为
(cmake\u PREFIX\u PATH“PATH/to/stuff”cache PATH“Initial cmake cache”FORCE)
您可以像这样调用cmake生成命令
cmake/PATH/to/project-C”/PATH/to/some cache.cmake“
,使事情变得更简单,将缓存文件路径定义为环境变量。
$ENV{VAR}