【问题标题】:How can I set Windows paths properly to be recognized easly by CMake?如何正确设置 Windows 路径以便 CMake 轻松识别?
【发布时间】:2017-04-28 11:35:30
【问题描述】:

我使用的是 Windows 10 64 位版本 1703。最近我想从头开始构建 Tesseract-OCR 库以用于学习目的。在此过程中,我不得不构建其他几个库,将它们放入一个文件夹并将其命名为“myLibrary”(C:/myLibrary)并将其设置在 Windows 路径变量中。即使其他库构建成功,即使“C:/myLibrary”在路径中,CMake 仍然很难找到库。是否每次添加新库时都必须修改特定项目的 CMakeLists.txt 文件才能看到该库?或者可以假设 CMake 具有查找库的功能,只要它们在路径中?仅在路径中设置 'C:/myLibrary' 是否足够,或者我应该添加每个编译库的 'bin' 和 'lib' 文件夹以便 CMake 找到它们?

【问题讨论】:

  • 我认为它不具备挖掘“bin”和“lib”文件夹的能力,因为并非每个项目都使用相同的约定。您需要明确添加这些。在我看来,如果你在代码库中使用了PATH 变量,那你就错了。
  • 仅供参考,PATH 环境变量用于查找可执行文件(exe、bat 等),不包括和库。

标签: c++ c windows cmake


【解决方案1】:

Windows PATH 不会帮助您检测 CMake 中的库。如果这甚至可以工作,那不是设计使然,而且可能很容易出错。在 CMake 中,通过 LIST 手动添加库的最佳方式。例如

target_link_libraries(${TARGET} PRIVATE
    "${LIB_PATH}/foo.lib"
    "${LIB_PATH}/baz.lib"
    "${ANOTHER_LIB_PATH}/buzz.lib"
    ...
}

您也可以GLOB 获取路径中的库,但不鼓励这样做,因为您需要手动重新运行 CMake 以获取任何新库。 GLOB 无法自行检测新库,但假设您不介意:

file(GLOB LIBS "${LIB_PATH}/lib*.dll")
target_link_libraries(${TARGET} PRIVATE ${LIBS})

要记住的另一件重要事情是您不应该依赖系统指定的 CMake 路径,您需要在 target_link_libraries 之前使用 set 指定位置,例如

set(LIB_PATH "C:/myLibrary")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多