编辑:接受的答案实际上表明通常可以将 CMAKE_MODULE_PATH 设置为任何其他 CMake 变量,例如通过-DCMAKE_MODULE_PATH pathCLI 参数。在我的情况下,似乎有一些包含的 CMake 脚本调用set(CMAKE_MODULE_PATH /library_path),它会删除所有先前设置为变量的路径。这就是为什么我不能让变量做我想要它做的事情。如果其他人面临这种情况,我会将问题留在这里。
我正在构建一个使用 Protobuf 库的(第 3 方)项目(但这个问题是通用的)。我的系统在系统范围内安装了比项目兼容的更新版本的 Protobuf。所以我从源代码下载并编译了旧版本的 Protobuf。
该项目使用 CMake,在其 CMakeLists.txt 中,有:
find_package(Protobuf REQUIRED)
Run Code Online (Sandbox Code Playgroud)
但是,它会找到(不兼容的)系统安装。当然,CMake 不知道我对 Protobuf 的自定义构建。但是我该怎么说呢?
例如,我已经在其中创建了一个FindProtobuf.cmake文件,~/usr/share/cmake-3.0/Modules/并希望构建过程使用这个文件来查找 Protobuf。但是我没有成功地迫使 CMake 选择这个而不是系统一个。我认为原因从 CMake 文档中很明显find_package:
该命令有两种搜索包的模式:“模块”模式和“配置”模式。当使用上述简化签名调用命令时,模块模式可用。CMake 在 CMAKE_MODULE_PATH 中搜索名为 Find<package>.cmake 的文件,然后是 CMake 安装。如果找到该文件,则由 CMake 读取并处理该文件。... 如果未找到模块且未提供 MODULE 选项,则命令进入配置模式。
所以,直到成功来改变CMAKE_MODULE_PATH,CMake的将刚刚拿起FindProtobuf.cmake安装到系统默认路径和永远不会进入“配置”模式,我大概可以使用CMAKE_PREFIX_PATH。
对我来说重要的是不要编辑CMakeLists.txt它,因为它属于我不维护的第 3 方项目。
我尝试过的(都没有成功):
CMAKE_MODULE_PATH=~/usr/share/cmake-3.0/Modules cmake ...(env. 变量不会“转移”到具有相同名称的 CMake 变量)cmake -DCMAKE_MODULE_PATH=~/usr/share/cmake-3.0/Modules ...(不起作用,可能是设计使然?)Protobuf_DIR=path/to/my/protobuf cmake ...(该项目不支持 Protobuf 的这种覆盖)在我看来,不幸CMAKE_MODULE_PATH的find_package是,改变used by的唯一方法是从内部改变它CMakeLists.txt,这正是我想要避免的。
您有什么想法/解决方法可以不触碰CMakeLists.txt并且仍然说服find_package我找到我的自定义 Protobuf?
作为参考,这个项目的 CMake 部分在 github 上。
作为对您问题的直接回答,是的,您可以CMAKE_MODULE_PATH通过运行在命令行中进行设置cmake -DCMAKE_MODULE_PATH=/some/path -S /path/to/src -B /path/to/build。
但这可能不会达到您想要的效果;见下文。
您提供的 Bitbucket 链接已失效,但这里有一些可能有帮助的建议。
CMAKE_PREFIX_PATH您可以通过将或Protobuf_ROOT(v3.12+)之一设置为 Protobuf 安装根目录,将 CMake 定向到自定义Protobuf 安装。find_package尝试模式。然后设置为包含.CONFIGCMAKE_FIND_PACKAGE_PREFER_CONFIGProtobuf_DIRProtobufConfig.cmakeFindProtobuf模块中记录的变量,此处: 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不在其中。
| 归档时间: |
|
| 查看次数: |
4339 次 |
| 最近记录: |