教程: 编译库
该页面内容为构建c++库
只有头文件的库
kmcmake 构建体系会导出cmake构建的对象,有些库并没有C++源文件,只有头文件。
这种类型的工程,可以使用 kmcmake_cc_interface函数导出对象。
函数: kmcmake_cc_interface
参数:
- PUBLIC 导出库必选。内部库不选
- NAMESPACE 必选
- NAME 必选
- HEADERS 必选
示例:
- header-only
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
参数:
- NAMESPACE 参见上文
- NAME 参见上文
- SOURCES 参见上文
- CXXOPTS 参见上文
- DEPS 参见上文
- HEADERS 参见上文
- INCLUDES 参见上文
- DEFINES 参见上文
示例:
- 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
参数:
- NAMESPACE 参见上 文
- NAME 参见上文
- SOURCES 参见上文
- CXXOPTS 参见上文
- DEPS 参见上文
- HEADERS 参见上文
- INCLUDES 参见上文
- DEFINES 参见上文
- LINKS 参见上文
- PLINKS 参见上文
- WLINKS 参见上文
示例:
- 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