【问题标题】:How do I tell CMake to output the package search paths?如何告诉 CMake 输出包搜索路径?
【发布时间】:2019-01-21 16:08:12
【问题描述】:

我正在 Windows 上编译 libdwarf。在其根CMakeLists.txt 中,它尝试通过以下方式找到LibElf

find_package(LibElf REQUIRED)

LibElf 不使用 CMAKE,我也没有将其配置为以任何方式注册自己,所以 find_package 当然会失败。我希望 CMake 打印出它在运行时搜索 LibElf 的所有路径。我如何告诉 CMake 输出这个?我已经尝试过--trace,但这只是向我展示了通过我的CMakeLists.txt 文件的执行流程——而不是 CMake 本身目前正在寻找包的位置。

我知道documentation for find_package 描述了 CMake 搜索的位置,但我可以使用各种变量、环境变量和注册表设置来修改该行为。鉴于我对刚才提到的那些项目的所有修改,我想看看 CMake 的确切位置。

我应该注意到libdwarf 包含一个cmake/FindLibElf.cmake 模块。如果FindLibElf.cmake 可以随心所欲地做任何想做的事,也许我的要求是不可能的?

【问题讨论】:

    标签: windows cmake


    【解决方案1】:

    从 3.17 版开始,CMake 提供了选项--debug-find,这会导致输出大量关于find_package 和其他find_* 命令的搜索过程的调试信息

    cmake --debug-find <...>
    

    设置变量CMAKE_FIND_DEBUG_MODE也可以达到类似的效果。

    可以在命令行中设置变量:

    cmake -DCMAKE_FIND_DEBUG_MODE=1 <...>
    

    或在CMakeLists.txt

    set(CMAKE_FIND_DEBUG_MODE 1)
    

    【讨论】:

    • 我在 Windows 上的 cmake 3.13.3 上试过这个,没有看到明显的效果。我尝试在命令行和我的根 CMakeLists.txt 中指定。我同时尝试了使用和不使用 --trace 和 --debug-output 。这对最新版本的 CMake 仍然有效吗?
    • 嗯,在我的 Linux 上的 CMake 3.11 中,这也不起作用......但他们在测试中使用了该变量。可能是,其他人可以对此有所了解。
    • 这似乎只是“最近”添加的,并且针对 CMake 3.17:gitlab.kitware.com/cmake/cmake/merge_requests/3935
    • 用特定的 CMake 版本更新了答案。还注意到--debug-find 选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多