假设我有一个名为
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
这可能吗?
这很大程度上取决于
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")
我刚刚遇到了同样的问题。对我有用的解决方案不必在 target_link_libraries 中使用绝对路径,如下所示:
target_link_directories(main PUBLIC
path_to_libfoo
)
target_link_libraries(main PUBLIC
-l:libfoo.so.0.1.0
)