针对特定库版本的CMake链接

问题描述 投票:0回答:2

假设我有一个名为

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

这可能吗?

c cmake shared-libraries
2个回答
2
投票

这很大程度上取决于

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")

0
投票

我刚刚遇到了同样的问题。对我有用的解决方案不必在 target_link_libraries 中使用绝对路径,如下所示:

target_link_directories(main PUBLIC
    path_to_libfoo
)

target_link_libraries(main PUBLIC
    -l:libfoo.so.0.1.0
)
© www.soinside.com 2019 - 2024. All rights reserved.