除了在 CMakeLists.txt 中硬编码用户特定的安装前缀之外,还能做什么?

问题描述 投票:0回答:1

考虑人们在同一代码库上一起工作的情况; C++ 与 CMake。代码库依赖于一个库,必须单独安装。

每个用户的图书馆可能位于不同的位置。用户可以像这样调用 CMake:

cmake -DCMAKE_PREFIX_PATH=/path/for/that/user .

但是,这并不是在所有情况下都很容易(例如 Windows 和 Visual Studio),并且需要重新输入。所以,我们有

list(APPEND CMAKE_PREFIX_PATH "/path/for/user")

在CMakeLists.txt中。这是可行的,但需要人们在拉出分支后不断改变路径,这很烦人并且很容易忘记。一旦在特定机器上设置,是否可以配置拉动新分支不会覆盖此路径?

github cmake
1个回答
1
投票

我建议不要在 CMakeLists.txt 中硬编码用户/机器特定的路径(任何时候你想这样做,请考虑定义必要的选项变量并使用 CMake 预设)。

一旦在特定机器上设置,是否可以配置拉动新分支不会覆盖此路径?

这正是 CMake 缓存 的用途。

对于这种用例,项目中的每个人都应该在调用 CMake 配置命令期间将

CMAKE_PREFIX_PATH
变量设置为缓存变量,或者在其 --prefix
 命令调用中将 
cmake install
 设置为缓存变量(这将覆盖在 CMake 缓存中设置或在 CMakeLists.txt 中硬编码的 
CMAKE_PREFIX_PATH
的任何值。


您还可以让每个用户创建自己的 CMakeUserPresets.json 文件,并将其设置在

cacheVariables
条目的
configurePresets
字段中。 但是实际上有一个专门的成员用于将预设配置到特定的安装目录:
installDir
,所以在这种情况下,他们最好只使用它。

确保将

CMakeUserPresets.json
放入 .gitignore 文件中(或者您必须为特定 VCS 执行的其他操作,以便 VCS 中不会跟踪用户预设文件)。


如果您有一些非用户/非特定于机器的(即更普遍适用的东西)默认值,您希望在用户未指定自己的

CMAKE_INSTALL_PREFIX
变量值的情况下对其进行硬编码,请使用
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
。引用文档中的示例:

if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  set(CMAKE_INSTALL_PREFIX "/my/default" CACHE PATH "..." FORCE)
endif()
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.