CMake 常用命令
CMake 支持大写、小写、混合大小写的命令。
预定义
PROJECT_NAME # 项目名称
CMAKE_SOURCE_DIR # 最外层CMakeLists.txt的目录
PROJECT_SOURCE_DIR # 当前CMakeLists.txt 所在的目录
CMAKE_CURRENT_SOURCE_DIR # 当前CMakeLists.txt 所在的目录
CMAKE_CURRENT_BINARY_DIR # 当前项目的编译输出目录
CMAKE_CURRENT_LIST_FILE # 当前CMakeLists.txt的绝对路径
CMAKE_CURRENT_LIST_LINE # 输出当前行
系统变量
CMAKE_MAJOR_VERSION # cmake主版本号,如3.8.5中的3
CMAKE_MINOR_VERSION # cmake次版本号,如3.8.5中的8
CMAKE_PATCH_VERSION # cmake补丁等级,如3.8.5中的5
CMAKE_SYSTEM # 系统名称
CAMKE_SYSTEM_NAME # 不包含版本的系统名
CMAKE_SYSTEM_VERSION # 系统版本
CMAKE_SYSTEM_PROCESSOR # 处理器名称
UNIX # 在所有的类UNIX平台为TRUE,包括OS X和cygwin
WIN32 # 在所有的win32平台为TRUE,包括cygwin
编译选项
# 设置c++版本
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ")
CMakeList 使用流程
设置最低的CMake版本
cmake_minimum_required(VERSION 3.10)
设置工程名称
project(project_name)
创建Source变量,且链接了需要编译的cpp文件
set(SOURCES main.cpp)
aux_source_directory
在目录中查找所有源文件。
aux_source_directory(<dir> <variable>)
收集指定目录中所有源文件的名称,并将列表存储在提供的 <variable>
变量中。 该命令旨在供使用显式模板实例化的项目使用。 模板实例化文件可以存储在 Templates 子目录中,并使用此命令自动收集,以避免手动列出所有实例化。
示例:
aux_source_directory(. DIR_SRCS)
添加索引头文件的目录
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
例如
include_directories(${DIR})
include_directories("${PROJECT_ROOT_DIR}/inc")
生成可执行文件
add_executable(${PROJECT_NAME} *.cpp)
add_executable(${PROJECT_NAME} ${SOURCES})
生成静态库和动态库
ADD_LIBRARY(libname [SHARED|STATIC|MODULE]
[EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)
类型有三种:
- SHARED,动态库
- STATIC,静态库
- MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待。
EXCLUDE_FROM_ALL 参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手工构建。
示例:
add_library(StaticLib src/Main.cpp) # 默认情况下生成的是静态库
add_library(StaticLib STATIC src/Main.cpp)
add_library(ShareLib SHARED src/Main.cpp)