【问题标题】:CMake: Overriding a find moduleCMake:覆盖查找模块
【发布时间】:2014-03-13 21:25:17
【问题描述】:

我想知道是否有可能用我自己的覆盖现有的(随 CMake 提供的)查找模块? 这样我就可以在我的项目中提供我稍微更新的模块,而无需强迫任何人替换 CMake 附带的模块。

我尝试了以下操作:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "cmake/Modules/FindBullet.cmake")

“cmake/Modules/FindBullet.cmake”在我的项目目录中,但它似乎不起作用。

【问题讨论】:

    标签: cmake bullet


    【解决方案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) 这就是我需要复制这些文件的原因。 :(
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多