此处只介绍最基本的用法,方便自己查阅,具体用法可参考 CMake 入门实战 | Demo |
常用参数详解:
cmake_minimum_required (VERSION 2.8) # 指定 CMake 最低版本号要求
project(project_name) # 项目信息
aux_source_directory(. DIR_SRCS) # 查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量
add_subdirectory(math) # 添加子目录,此处子目录名为"math"
add_executable(Demo main.c) # 指定生成目标
add_library (MathFunctions ${DIR_LIB_SRCS}) # 生成链接库
target_link_libraries(Demo MathFunctions) # 添加链接库
set(CMAKE_INCLUDE_CURRENT_DIR ON)
configure_file ( # 加入一个配置头文件,用于处理 CMake 对源码的设置
"${PROJECT_SOURCE_DIR}/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)
option (USE_MYMATH # 是否使用自己的 MathFunctions 库
"Use provided math implementation" ON)
if (USE_MYMATH) # 是否加入 MathFunctions 库
include_directories ("${PROJECT_SOURCE_DIR}/math")
add_subdirectory (math)
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
下面用一个例子来学习CMake
目录结构如下:
一般我们的程序都是由根目录和子目录的源文件构成,此时需要分别在根目录和math子目录里各编写一个CMakeLists.txt文件。为了方便,我们可以先将math目录里的文件编译成静态库再由main函数调用。 根目录中的CMakeLists.txt:
# CMake 最低版本号要求
cmake_minimum_required(VERSION 2.8)
# 项目信息
project(demo)
# 查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 math 子目录
add_subdirectroy(math)
# 指定生成目录
add_executable(demo main.c)
# 添加链接库
target_link_libraries(demo MathFunctions)
命令add_subdirectory指明本项目包含一个子目录math,这样math目录下的CMakeLists.txt文件和源代码也会被处理; 命令target_link_libraries指明可执行文件main需要连接一个名为MathFunctions的链接库。 子目录中的CMakeLists.txt:
# 查找当前目录下的所有源文件,并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library(MathFunctions ${DIR_LIB_SRCS})
该文件中使用命令add_library将src目录中的源文件编译成静态链接库。