c++ - 覆盖 find_package 的默认搜索顺序
问题描述
我试图避免 cmake find_package 使用系统中的 FindJPEG.cmake,我创建了 FindJPEG.cmake 的副本并对其进行了一些更改,并在其中放入了一条消息(状态“...”)以便能够区分它,类似于:
...
message(STATUS "MY CUSTOM JPEG FIND SCRIPT")
if(NOT JPEG_LIBRARY)
message(STATUS "MY CUSTOM JPEG FIND SCRIPT >> FIRST TIME FIND LIBRARY")
find_library(JPEG_LIBRARY_RELEASE NAMES ${jpeg_names})
...
然后我将这个更改的脚本复制到 /my/custom/module/path ,然后我开始我的 cmake 配置:
cmake .. -DCMAKE_MODULE_PATH=/my/custom/module/path;${CMAKE_MODULE_PATH}
如果在我的 CMakeLists.txt 中我只调用 find_package(JPEG) 一切正常(显示自定义消息)但是我在我的 CMakeLists.txt 中添加 Jasper 依赖项,这也取决于 JPEG。所以我只需要做一个 find_package(Jasper) JPEG 依赖将由 jasper 加载。
最后一个问题是我的 FindJPEG.cmake 更改脚本现在没有被调用,我认为这是因为 CMAKE_MODULE_PATH 搜索顺序首先从当前目录开始......并且不遵循我的 cmake 命令行指定的顺序。
我们可以改变这种行为吗,或者如果我解释错了,有人可以更好地解释为什么会这样吗?
谢谢努诺
解决方案
如果您使用自己的自定义模块路径发货,请使用:
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake)
在您的项目开始时,这是通常的模式,CMake
带有新cmake
文件所在的文件夹。
然后您可能还想查看一些变量,例如CMAKE_LIBRARY_PATH,它们可能足以更改搜索路径而无需重写新的FindJPEG.cmake
.
推荐阅读
- svg - Octave 将图像打印成 svg
- javascript - JavaScript 是在 Node.js 中编译的吗?
- java - 根据属性值移除 XML 节点
- database - Firebase 社交网络结构
- c - 为什么数据类型会发生冲突?
- delphi - Create a Procedure using a TClientDataset as a parameter
- ruby-on-rails - Rails Postgres 迁移:无效类型名称“jsonb USING content::jsonb”或无效类型名称“jsonb USING CAST(content AS jsonb)
- python - 如何减少错误处理代码中的 Try 和 except 语句
- dataframe - 根据值pyspark将列拆分为多行
- sql - 拆分字母数字字符串时遇到问题