以下是一个完整的案例,演示如何使用CMake将第三方动态库作为子项目引入:

project(MyProject)

# 设置CMake最低版本要求
cmake_minimum_required(VERSION 3.10)

# 设置子项目的名称和路径
set(ThirdPartyLib third_party_lib)
set(ThirdPartyLibPath ${CMAKE_CURRENT_SOURCE_DIR}/${ThirdPartyLib})

# 添加子目录
add_subdirectory(${ThirdPartyLibPath})

# 主项目的源文件
set(SOURCES main.cpp)

# 添加可执行文件
add_executable(MyProject ${SOURCES})

# 链接第三方库
target_link_libraries(MyProject PRIVATE ThirdPartyLib)

然后,在${ThirdPartyLibPath}目录下创建一个CMakeLists.txt文件,用于构建和安装第三方动态库:

# 设置子项目的名称
project(ThirdPartyLib)

# 查找动态库文件,并设置库的输出路径
file(GLOB LIB_FILES ${CMAKE_CURRENT_SOURCE_DIR}/lib/*.dll ${CMAKE_CURRENT_SOURCE_DIR}/lib/*.so)
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# 添加动态库作为子项目
add_library(${PROJECT_NAME} SHARED IMPORTED GLOBAL)

# 设置动态库的路径
set_target_properties(${PROJECT_NAME} PROPERTIES IMPORTED_LOCATION ${LIB_FILES})

# 设置头文件路径
target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include)

# 安装动态库和头文件
install(FILES ${LIB_FILES} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/bin)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/include)

这个案例假设第三方动态库的目录结构如下:

third_party_lib/
├── CMakeLists.txt
├── include/
│   └── third_party_lib.h
├── lib/
│   ├── libthird_party_lib.dll
│   └── libthird_party_lib.so
└── bin/
    ├── libthird_party_lib.dll
    └── libthird_party_lib.so

通过以上配置,CMake将会自动构建和安装第三方动态库,并将其作为子项目引入到主项目中

cmake 通过封装为子项目的形式引入第三方已经生成且打包好的动态库拥有数量不确定的库文件要求跨平台动态库的存储使用标准的目录结构 lib下存储lib或a等 include bin下面存储dll或so等需要把动态库当成子项目处理动态库已经是生成好的给出完整案例

原文地址: https://www.cveoy.top/t/topic/iRCY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录