「CMake」叫我痴心换真情
目录
记录并整理CMake配置及使用技巧。
安装
语法
Pseudo Targets
伪库是一种不生成最终二进制库,而用于传播信息或复用中间对象的库。
Interface Libraries
接口库用于对它依赖的库指定使用要求,它本身不编译源文件也不产生二进制库。CMake >= 3.15 可以对
接口库设置PUBLIC_HEADER和PRIVATE_HEADER属性,以便在install时进行安装。CMake >= 3.19
库目标可以选择含源码,主要用于header-only库。CMake >= 3.23
可以使用target_sources::INTERFACE添加头文件到接口库。
add_library(Eigen INTERFACE)
target_sources(Eigen INTERFACE
FILE_SET HEADERS
BASE_DIRS src
FILES src/eigen.h src/vector.h src/matrix.h
)
add_executable(exe1 exe1.cpp)
target_link_libraries(exe1 Eigen)Object Libraries
添加源文件到
对象库,且无需将目标文件归档或链接到某个常规库。
常利用其可作为源文件注入其它对象的特性一次性生成动态库、静态库。CMake >= 3.12
可以使用target_link_libraries()连接对象库。
add_library(<name> OBJECT <sources>...) # 创建
add_library(... $<TARGET_OBJECTS:objlib> ...) # 注入到普通库
add_executable(... $<TARGET_OBJECTS:objlib> ...) # 注入到可执行对象