首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过依赖的库链接第三方库,使用Cmake

通过依赖的库链接第三方库,使用Cmake
EN

Stack Overflow用户
提问于 2020-01-08 15:52:22
回答 1查看 54关注 0票数 0

为了简化依赖,我们使用包装库来包装第三方库,比如gradle。例如:

lib_wrapper ->第三方库

A -> libWrapper

B -> libWrapper

因此,A、B可以使用第三方中的函数。但是我写的camke文件不起作用。

lib_wrapper cmake文件:

代码语言:javascript
复制
project(lib_wrapper)
# emty.c is an empty c file, do not use any ib_thirdparty funciton
add_library(lib_wrapper SHARED empty.c)

target_link_libraries(lib_wrapper lib_thirdparty1.a)
target_link_libraries(lib_wrapper lib_thirdparty2.a)
target_link_libraries(lib_wrapper lib_thirdparty3.a)

A的camke文件:

代码语言:javascript
复制
project(alib)
add_library(A SHARED a.c)

# add dependency
add_subdirectory(${lib_wrapper_path} lib_wrapper/out)
add_dependencies(alib lib_wrapper)
add_library(lib_wrapper_import SHARED IMPORTED)
set_target_properties(lib_wrapper_import PROPERTIES IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib_wrapper_import.so")

target_link_libraries(alib lib_wrapper_import)

我也尝试在target_link_libraries中使用公共关键字或接口关键字,但不起作用。有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-08 20:30:27

我建议使用包装器库作为接口库。例如:

代码语言:javascript
复制
project(lib_wrapper)
add_library(lib_wrapper INTERFACE)
target_link_libraries(lib_wrapper lib_thirdparty1.a)
target_link_libraries(lib_wrapper lib_thirdparty2.a)
target_link_libraries(lib_wrapper lib_thirdparty3.a)
target_include_directories(lib_wrapper INTERFACE <enter the third party include folders here>)

然后在项目中:

代码语言:javascript
复制
project(alib)
add_library(A SHARED a.c)

# add dependency
add_subdirectory(${lib_wrapper_path})
target_link_libraries(alib lib_wrapper)

这实际上是cmake处理目标的方式,这些目标仅仅是头文件的库。如果添加了正确的路径,为接口库调用target_include_directories还将包括第三方库的所有include文件夹。

关于cmake中接口目标的更完整的教程可以在这里找到,例如:http://mariobadr.com/creating-a-header-only-library-with-cmake.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59641540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档