gpt4 book ai didi

cmake - 是否可以从 CMake 命令行更改 CMAKE_MODULE_PATH?

转载 作者:行者123 更新时间:2023-12-03 16:25:44 24 4
gpt4 key购买 nike

编辑:接受的答案实际上表明通常可以将 CMAKE_MODULE_PATH 设置为任何其他 CMake 变量,例如通过 -DCMAKE_MODULE_PATH path命令行参数。就我而言,似乎有一些包含的 CMake 脚本调用 set(CMAKE_MODULE_PATH /library_path) ,它会删除所有以前设置为变量的路径。这就是为什么我不能让变量做我想做的事。我将把问题留在这里,以防其他人面临这种​​情况。

我正在构建一个使用 Protobuf 库的(第 3 方)项目(但这个问题是一般性的)。我的系统在系统范围内安装了比项目兼容的更新版本的 Protobuf。所以我从源代码下载并编译了一个旧版本的 Protobuf。
该项目使用 CMake,在其 CMakeLists.txt 中,有:

find_package(Protobuf REQUIRED)
但是,它会找到(不兼容的)系统安装。当然,CMake 不知道我自定义的 Protobuf 构建。但是我该怎么说呢?
我创建了一个 FindProtobuf.cmake文件,比如说, ~/usr/share/cmake-3.0/Modules/并希望构建过程使用这个来查找 Protobuf。但是我没有成功强制 CMake 选择这个而不是系统一个。我认为原因在 find_package 的 CMake 文档中非常明显。 :

The command has two modes by which it searches for packages: “Module” mode and “Config” mode. Module mode is available when the command is invoked with the above reduced signature. CMake searches for a file called Find<package>.cmake in the CMAKE_MODULE_PATH followed by the CMake installation. If the file is found, it is read and processed by CMake. ... If no module is found and the MODULE option is not given the command proceeds to Config mode.


所以直到我成功改变 CMAKE_MODULE_PATH , CMake 只会选择 FindProtobuf.cmake安装到默认系统路径,永远不会进入“配置”模式,我可能会使用 CMAKE_PREFIX_PATH .
对我来说重要的是不要编辑 CMakeLists.txt因为它属于我不维护的第 3 方项目。
我尝试过的(都没有成功):
  • 调用CMAKE_MODULE_PATH=~/usr/share/cmake-3.0/Modules cmake ... (环境变量未“转移”到同名的 CMake 变量)
  • 调用cmake -DCMAKE_MODULE_PATH=~/usr/share/cmake-3.0/Modules ... (不起作用,可能是设计使然?)
  • 调用Protobuf_DIR=path/to/my/protobuf cmake ... (该项目不支持这种对 Protobuf 的覆盖)

  • 在我看来,不幸的是,改变 CMAKE_MODULE_PATH 的唯一方法是由 find_package 使用是从 CMakeLists.txt 中更改它,这正是我想要避免的。
    您对如何不触摸 CMakeLists.txt 有任何想法/解决方法吗?仍然说服 find_package找到我的自定义 Protobuf?
    作为引用,这个项目的 CMake 部分是 on github .

    最佳答案

    作为对您问题的直接回答,是的,您可以设置 CMAKE_MODULE_PATH在命令行运行 cmake -DCMAKE_MODULE_PATH=/some/path -S /path/to/src -B /path/to/build .
    但这可能不会做你想做的事;见下文。

    您提供的 Bitbucket 链接已失效,但这里有一些建议可能会有所帮助。

  • 避免编写自己的查找模块,尤其是当上游提供 CMake 配置模块时。
  • 您可以通过设置 CMAKE_PREFIX_PATH 之一将 CMake 定向到您的自定义 Protobuf 安装。或 Protobuf_ROOT (v3.12+) 到 Protobuf 安装根目录。
  • 你可以告诉find_package试试CONFIG模式优先设置 CMAKE_FIND_PACKAGE_PREFER_CONFIG 为真(v3.15+)。然后设置 Protobuf_DIR 到包含 ProtobufConfig.cmake 的目录.
  • 其他一切都失败了,您可以手动设置 CMake 自己的 FindProtobuf 中记录的变量模块,这里:https://cmake.org/cmake/help/latest/module/FindProtobuf.html

  • 所有这些变量都可以在配置命令行中使用 -D 设置。旗帜。
    很少有环境变量填充 CMake 变量以启动,我会避免依赖它们。这里有一个详尽的列表: https://cmake.org/cmake/help/latest/manual/cmake-env-variables.7.html . CMAKE_MODULE_PATH不在其中。

    关于cmake - 是否可以从 CMake 命令行更改 CMAKE_MODULE_PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43924776/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com