Skip to main content
Version: 1.1.1

教程: 编译库

该页面内容为构建c++库

只有头文件的库

kmcmake 构建体系会导出cmake构建的对象,有些库并没有C++源文件,只有头文件。 这种类型的工程,可以使用 kmcmake_cc_interface函数导出对象。

函数: kmcmake_cc_interface

参数:

  • PUBLIC 导出库必选。内部库不选
  • NAMESPACE 必选
  • NAME 必选
  • HEADERS 必选

示例:

kmcmake_cc_interface(
NAMESPACE ${PROJECT_NAME}
NAME api
HEADERS
api.h
CXXOPTS
${KMCMAKE_CXX_OPTIONS}
PUBLIC
)
warning

CXXOPTS 在头文件的库中无效果

编译对象

cmake 构建系统中的对象OBJECT)实际上是一组.o的集合。是中间的产物。如果一个库有 多个子模块,可以使用kmcmake_cc_object先将各个子模块编译为OBJECT,再将OBJECT使用kmcmake_cc_library合并编译为库。

函数:kmcmake_cc_object

参数:

示例:

kmcmake_cc_object(
NAMESPACE changeme
NAME obj2
SOURCES object2.cc
CXXOPTS
${CARBIN_CXX_OPTIONS}
DEPS
changeme::object
)

编译库

kmcmake_cc_library是编译库的工具函数,不仅可以从源文件编译,同时 可以将kmcmake_cc_object生成的对象合并到库中。

函数:kmcmake_cc_library

参数:

示例:

kmcmake_cc_library(
NAMESPACE ${PROJECT_NAME}
NAME foo
SOURCES
foo.cc
CXXOPTS
${KMCMAKE_CXX_OPTIONS}
PLINKS
${KMCMAKE_DEPS_LINK}
PUBLIC
)

库安装

库文件安装

kmcmake_cc_*函数已经集成了安装和导出对象的功能,在centos系统上, .so.a库文件会安装到lib64文件夹 下,kmcmake提供了KMCMAKE_INSTALL_LIB选项,编译时使用-DKMCMAKE_INSTALL_LIB=ON选项,可以设置库安装到lib文件夹下。

头文件安装

头文件默认提供了安装步骤:

install(DIRECTORY ${PROJECT_NAME}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING
PATTERN "*.inc"
PATTERN "*.h"
PATTERN "*.hpp"
)

如果对头文件的类型或者安装有额外需要,请在CMakeLists.txt文件中做修改。

对象导出

对于 C++的库,kumo 默认导出一个静态库和一个动态库,调用者根据需要调用动态或者静态库

示例:

find_package(turbo REQUIRED)

kmcmake_cc_library(
NAMESPACE ${PROJECT_NAME}
NAME foo
SOURCES
foo.cc
CXXOPTS
${KMCMAKE_CXX_OPTIONS}
PLINKS
${KMCMAKE_DEPS_LINK} turbo::turbo_static
PUBLIC
)