It's our wits that make us men.

CMake 初体验

Posted on By tkly

此处只介绍最基本的用法,方便自己查阅,具体用法可参考 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

目录结构如下: filetree

一般我们的程序都是由根目录和子目录的源文件构成,此时需要分别在根目录和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目录中的源文件编译成静态链接库。