【问题标题】:CMake can't link external librariesCMake 无法链接外部库
【发布时间】:2020-01-29 01:04:57
【问题描述】:

我有一个包含源文件的 C++ 项目。对于外部项目,我需要在一些文件夹中搜索包含的库:

/home/data/lib/wisenet
/home/data/lib/wise_log
/home/data/lib/wise_rs_device
/home/data/lib/json
/home/data/lib/wise_versioning

我必须写什么来在 CMake 中包含这些外部库?这些文件夹仅包含接口资源(h 文件和 .a 库)。

我尝试像这样包含这些目录:

include_directories(
    /home/data/lib/wisenet
    /home/data/lib/wise_log
    ... etc
)

而且我不明白如何正确添加 libwise_rs_device.a 等 lib 文件。

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    包含目录仅用于...好吧,包含代码的路径。它不会链接库。

    使用外部库的正确方法是使用导入库:

    add_library(wise_rs_device STATIC IMPORTED GLOBAL)
    set_target_properties(wise_rs_device PROPERTIES
        IMPORTED_LOCATION "path/to/static/library"
        INTERFACE_INCLUDE_DIRECTORIES "path/to/headers/of/wise_rs_device"
    )
    

    然后,您可以简单地将导入的目标链接到您的目标:

    # will link to the static library and add include directories.
    target_link_libraries(your_executable PRIVATE wise_rs_device)
    

    【讨论】: