公共库开发

公共库如同其他第三方开源库一样, 需要能被使用它的项目引用和链接. 由于本项目使用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 库示例 .