.. _doc_dev_baselib: 公共库开发 ========== 公共库如同其他第三方开源库一样, 需要能被使用它的项目引用和链接. 由于本项目使用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) 公共库的导出可参考 :ref:`eaEvent ` 库示例 .