【问题标题】:Link with self-compiled static libraries with cmake使用 cmake 链接自编译静态库
【发布时间】:2018-03-13 10:49:35
【问题描述】:

我尝试为项目编写一些测试。如果我需要一些项目文件,我会写include_directories 语句,所有的都将包含在内。如果需要一些手动编译的静态库,我尝试设置target_link_libraries

如果我设置了绝对路径,那么所有链接都可以,但是对于任务我需要另一种方式来链接另一个库,因为库的相对路径给出了未定义的引用。

在这种情况下一切正常:

target_link_libraries(ConsoleDumperTest GTest::GTest GTest::Main PocoFoundation PocoUtil PocoNet ${YAML_LIBRARIES})
target_link_libraries(ConsoleDumperTest /home/yrusinov/projects/build-fleetd-2-Desktop-dbg/protocols/libprotocols.a)
target_link_libraries(ConsoleDumperTest /home/yrusinov/projects/build-fleetd-2-Desktop-dbg/consumers/libconsumers.a)
target_link_libraries(ConsoleDumperTest /home/yrusinov/projects/build-fleetd-2-Desktop-dbg/consumers/Console/libconsole.a)

但如果我这样做:

target_link_libraries(ConsoleDumperTest GTest::GTest GTest::Main PocoFoundation PocoUtil PocoNet ${YAML_LIBRARIES})
target_link_libraries(ConsoleDumperTest ../../../protocols/libprotocols.a)
target_link_libraries(ConsoleDumperTest ../../../consumers/libconsumers.a)
target_link_libraries(ConsoleDumperTest ../../../consumers/Console/libconsole.a)

尽管目录中包含库,但我收到未定义的引用。我必须通过哪种方式设置链接库的路径?

【问题讨论】:

    标签: c++ linux cmake


    【解决方案1】:

    根据documentationtarget_link_libraries 预计不适用于相对路径:您应该使用绝对路径或库名称

    通过知道相对路径,在 CMake 中很容易构造绝对路径。例如,假设您知道当前源目录的相对路径(包含当前执行的目录CMakeLists.txt),请使用 CMAKE_CURRENT_SOURCE_DIR 变量:

    target_link_libraries(ConsoleDumperTest
        ${CMAKE_CURRENT_SOURCE_DIR}/../../../protocols/libprotocols.a
    )
    

    【讨论】:

      【解决方案2】:

      CMake 的 link_directories(...) 命令提供了这个:

      link_directories(directory1 directory2 ...)

      指定链接器搜索库的路径。该命令仅适用于调用后创建的目标。赋予此命令的相对路径被解释为相对于当前源目录,请参阅 CMP0015。

      还要注意,如果这些库依赖项是在同一个 CMake 项目中定义的,使用 add_library(target_name ...),您可以在 target_link_libraries 中指定目标名称而不是二进制名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多