c++ - 覆盖 find_package 的默认搜索顺序

标签 c++ cmake

我试图避免 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)

在项目开始时,这是通常的模式,使用 CMakecmake 文件所在的 fodler。

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

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

相关文章:

c++ - 为什么 CLion 可以正确构建和链接 Qt,但不能运行我的可执行文件?

build-process - 如何在编译时在CMake生成的Makefile中运行命令?

c++ - 链接共享库,它也链接了 cmake 中的不同共享库

c++ - 我遇到了编译器的情况。当我运行代码来删除一串特殊字符时,它在一个编译器中运行,但在另一个编译器中不运行?

c++ - 使用宏“覆盖”cmake 命令并恢复其默认行为

c++ - MPI_Waitall 实际上是如何工作的

即使是静态链接的 C++ 请求 MSVCP110D.dll

cmake - 检索 CMake 中的所有链接标志

c++ - Eclipse Papyrus UML 插件无法在类图中加载 C++ 构造型列表

c++ - 如何在 private 中定义 lambda 函数?