【问题标题】:CMake link against a specific library version针对特定库版本的 CMake 链接
【发布时间】:2021-08-19 14:55:33
【问题描述】:

假设我有一个名为 libfoo.so.0.1.0 的库,我想在 CMake 中链接它。

该库位于libs 目录中

我的 CMake 如下所示:

cmake_minimum_required(VERSION 3.15)

project(using_shared_library)

add_executable(main main.c)

target_link_directories(main
    PUBLIC libs)
    
target_link_libraries(main libfoo.so.0.1.0)

由此生成的链接行包括:

 -Llibs -lfoo

我希望 CMake 生成:

-Llibs -l:libfoo.so.0.1.0

这可能吗?

【问题讨论】:

  • 只需使用 absolute 库路径:target_link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/libs/libfoo.so.0.1.0)

标签: c cmake shared-libraries


【解决方案1】:

这很大程度上取决于libfoo...

它是否提供 CMake 包?那么

find_package(foo 0.1.0 REQUIRED)
target_link_libraries(myTarget PRIVATE foo::foo)

是最合适的。

如果它有 pkg​​-config,那么你可以使用:

find_package(PkgConfig REQUIRED)
pkg_check_modules(foo REQUIRED IMPORTED_TARGET foo=0.1.0)

target_link_libraries(myTarget PRIVATE PkgConfig::foo)

但如果真的只是签入到版本控制中,那么你可以使用绝对路径:

target_link_libraries(myTarget PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/libs/libfoo.so.0.1.0")

【讨论】:

    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2020-09-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多