我试图避免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命令行指定的顺序。

我们可以改变这种行为吗,或者如果我在解释这个错误,那么有人可以更好地解释为什么会这样吗?

谢谢
no野

最佳答案

如果要使用自己的自定义模块路径进行运输,请使用:

SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake)


在项目开始时,这是通常的模式,使用CMake新的cmake文件所在的文件夹。

然后,您可能还希望查看一些变量,例如CMAKE_LIBRARY_PATH,它们足以更改搜索路径而无需重写新的FindJPEG.cmake

关于c++ - 覆盖find_package的默认搜索顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54459065/

10-17 00:33