CMake:覆盖查找模块
Posted
技术标签:
【中文标题】CMake:覆盖查找模块【英文标题】:CMake: Overriding a find module 【发布时间】:2014-03-13 21:25:17 【问题描述】:我想知道是否有可能用我自己的覆盖现有的(随 CMake 提供的)查找模块? 这样我就可以在我的项目中提供我稍微更新的模块,而无需强迫任何人替换 CMake 附带的模块。
我尝试了以下操作:
set(CMAKE_MODULE_PATH $CMAKE_MODULE_PATH "cmake/Modules/FindBullet.cmake")
“cmake/Modules/FindBullet.cmake”在我的项目目录中,但它似乎不起作用。
【问题讨论】:
【参考方案1】:CMAKE_MODULE_PATH
必须设置为包含您的查找模块文件版本的目录:
set(CMAKE_MODULE_PATH $CMAKE_MODULE_PATH "$CMAKE_SOURCE_DIR/cmake/Modules")
【讨论】:
我在使用这种方法时遇到了问题。就我而言,我需要覆盖FindProtobuf.cmake
。问题是,它包含SelectLibraryConfigurations.cmake
(其中包含更多文件),并且被覆盖的版本尝试在同一位置查找此文件失败。这可能与 CMAKE_MODULE_PATH
在附加我自己的路径之前是一个空列表有关。我最终也复制了所有包含的模块,但这是一个糟糕的解决方案。除了将原始路径添加到CMAKE_MODULE_PATH
之外,知道如何解决它吗? (为什么一开始就不存在?)
顺便说一句,我们使用list
代替:list(APPEND CMAKE_MODULE_PATH $CMAKE_SOURCE_DIR/cmake/Modules)
虽然我认为这最终并不重要。
哦...我自己找到了问题的根源。 FindProtobuf.cmake
include($CMAKE_CURRENT_LIST_DIR/SelectLibraryConfigurations.cmake)
这就是我需要复制这些文件的原因。 :(以上是关于CMake:覆盖查找模块的主要内容,如果未能解决你的问题,请参考以下文章
从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值
CMAKE_INSTALL_PREFIX如何设置默认值,并且保留从命令行覆盖的能力?
Cmake:将子目录链接模式覆盖为 LINK_PRIVATE