跳到主要内容

CMake 最佳实践

练习 1

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo1)

# 指定生成目标
add_executable(Demo main.cc)

如果有多个源文件存在,则修改CMakeLists.txt,在制定目标那一行的文件后面进行添加操作

如果源文件众多,还可以使用aux_source_directory命令,它可以查找指定目录下的所有源文件,将结果存进指定变量名,语法格式如下:

aux_source_directory(<dir><variable>)

例如

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Demo1)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(Demo ${DIR_SRCS})

这样,CMake 会将当前目录所有源文件的文件名赋值给变量DIR_SRCS,再指示变量DIR_SRCS中的源文件需要编译成一个名称为 Demo 的可执行文件。

源码编译依赖库

示例,假设构建生成的可执行文件为zipapp,该文件依赖第三方库archive,链接archive库时从源码编译生成lib:

add_library(archive archive.cpp zip.cpp lzma.cpp)
add_executable(zipapp zipapp.cpp)
target_link_libraries(zipapp archive)

参考自官方文档:

https://cmake.org/cmake/help/v3.5/manual/cmake-buildsystem.7.html#binary-targets

使用预先编译好的依赖库

示例,假设我们已经生成好的库叫mylib.so,位置在../lib目录下,构建生成的可执行程序叫myapp,它引用了mylib.so

link_directories(../lib)
add_executable(myapp myapp.cpp)
target_link_libraries(myapp mylib)

参考自:http://stackoverflow.com/questions/8774593/cmake-link-to-external-library