公共库开发
公共库如同其他第三方开源库一样, 需要能被使用它的项目引用和链接. 由于本项目使用cmake作为统一的编译系统, 因此生成的公共库需要能方便的被其他工程在cmake中进行引用和链接.
1. 安装公共库
为了方便管理维护以及与第三方开源库进行区分, UCS 将公共库存放到 ./deps/workspace/install/${cpuType} 目录. 因此开发的公共库需要将编译后的库文件和头文件分别放到 ./deps/workspace/install/${cpuType}/lib 和 ./deps/workspace/install/${cpuType}/include 目录中.
UCS 提供了一些cmake宏函数来方便的安装公共库, 这些宏函数定义在 ./cmake/CagyMacros 文件中.使用时, 需要先包含该文件.
# 引用cmake模块文件CagyMacros
include(CagyMacros)
...
# 将lib文件安装到 './deps/workspace/install/${cpuType}/lib' 目录
CAGY_INSTALL_LIB(${PROJECT_NAME})
# 将h文件安装到 './deps/workspace/install/${cpuType}/include' 目录
install(FILES ${BaseLib_HEADERS} COMPONENT Devel DESTINATION include)
install(FILES ${eaEvent_HEADERS} COMPONENT Devel DESTINATION include/eaEvent)
# 如果需要将库导出, 以便其他项目可使用 find_package() 的方式进行查找引用, 可以添加如下语句:
CAGY_GENERATE_PACKAGE(eaEvent)
如果需要导出公共库, 则需要单独编写 Config.cmake 文件, 如: eaEventConfig.cmake , 其内容如下:
include("${CMAKE_CURRENT_LIST_DIR}/eaEventTargets.cmake")
2. 引用公共库
需要引用和链接公共库的项目, 可以修改其CMakeLists.txt文件, 添加如下内容:
# 引用公共库
target_include_directories(${PROJECT_NAME}
...
PRIVATE ${workspace}/${cpuType}/include
)
# 链接公共库
target_link_libraries(${PROJECT_NAME} your_base_lib)
其中 ${workspace} 为已经定义好的环境变量, 指向 ./deps/workspace/install 目录. ${cpuType} 为已经定义好的环境变量, 为当前本机的cpu类型, 如 x86_64 , aarch64 等.
如果公共库已经进行了包导出, 则可以简化上述步骤, 直接使用 find_package() 进行查找引用, 如下:
# 引用公共库
find_package(eaEvent REQUIRED)
# 链接公共库
target_link_libraries(${PROJECT_NAME} eaEvent)
公共库的导出可参考 eaEvent 库示例 .