将子目录中的内容编译为链接库
当项目中包含多个子目录时,一般会将子目录中的内容编译为一个链接库来与主目录中的内容建立关联。这需要在子目录中也建立一个CMakeLists.txt
文件对子目录中的内容进行配置。
假设目前有一个子目录supplier
,首先看子目录中CMakeLists.txt
是如何将这个子目录的内容编译为一个库的。
# 收集当前目录下的全部源文件
aux_source_directory(. DIR_LIB_SRCS)
# 生成静态链接库,注意这里库的名称,会在主配置文件中使用
add_library(SupplierLibrary ${DIR_LIB_SRCS})
# 指定链接库的安装路径
install (TARGETS SupplierLibrary DESTINATION bin)
install (FILES SupplierLibrary.h DESTINATION include)
然后可以在主配置文件用对其进行引用。
project(Demo)
aux_source_directory(. DIR_SRCS)
# 添加库所在的子目录
add_subdirectory(supplier)
# 指定生成目标
add_executable(Demo ${DIR_SRCS})
# 添加链接库
target_link_libraries(Demo SupplierLibrary)
add_library
默认生成静态链接库,如果需要生成其他类型的链接库,可以添加参数,例如add_library(SupplierLibrary SHARED ${DIR_LIB_SRCS})
可以用来生成动态链接库,add_library(SupplierLibrary STATIC ${DIR_LIB_SRCS})
可以用来生成静态库。