我试图避免 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})
...
然后我将这个更改后的 scritp 复制到/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
文件所在的 fodler。
然后您可能还想查看一些变量,例如 CMAKE_LIBRARY_PATH这可能足以更改搜索路径而无需重写新的 FindJPEG.cmake
。
关于c++ - 覆盖 find_package 的默认搜索顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54459065/