CMake项目的CMackeLists.txt内容语法详解

文章目录

  • 1、CMake
    • 构建级别
  • 2、CMakeLists.txt
    • 文件基本结构
    • 语法解析
    • 宏变量含义

1、CMake

CMake(cross platform make)是一个跨平台的安装编译工具,可以使用简单的语句描述安装编译过程,输出安装编译过程中产生的中间文件。CMake不直接产生最终的文件,而是产生对应的构造文件,如linux下的makefile,windows下的vs的projects等
CMake的编译步骤如下:
1)编写CMakeLists.txt文件
2)用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件
3)用make命令编译源码生成可执行文件或库文件

构建级别

级别 说明 编译器命令
Release 不可以打断点调试,程序开发完成后发行使用的版本,占的体积小。 它对代码做了优化,因此速度会非常快 -O3 -DNDEBUG
Debug 调试的版本,体积大 -g
MinSizeRel 最小体积版本 -Os -DNDEBUG
RelWithDebInfo 既优化又能调试 -O2 -g -DNDEBUG

2、CMakeLists.txt

文件基本结构

#指定所需的CMake最低版本
cmake_minimum_required(VERSION 3.5)
#定义项目名称和可选的语言,必需项
project (Headers)
#设置变量和选项
set(SOURCE src/Headers.cpp)
#添加子目录,父目录必需项
add_subdirectory(src)
#添加可执行文件或库
add_executable(Headers, Headers.cpp)
# 头文件路径,必需项
include_directories(路径)
#库文件路径,必需项
link_directories(路径) 
#添加依赖项和链接库
target_link_libraries(Headers PRIVATE lib)

语法解析

语法 解析
cmake_minimum_required (VERSION 3.5) 使用CMAKE的最低版本为3.5
project(xxx) 定义项目名称,会自动创建两个变量:PROJECT_SOURCE_DIR 和 PROJECT_NAME。会影响${PROJECT_SOURCE_DIR} 的结果。
aux_source_directory(路径 变量) 获取路径下的所有文件,并赋值给变量
set(变量 文件名/路径/…) 给文件名/路径名或者其他字符串起别名,用${变量}获取变量内容
add_definitions(编译选项) 添加编译选项
message(消息) 打印消息
add_subdirectory(子文件夹名称) 编译子文件夹的CMakeLists.txt
add_library(库文件名称如xxx STATIC 文件) 将文件生成静态库
add_executable(可执行文件名称 文件) 将文件生成可执行文件
include_directories(路径) 规定.h头文件路径
link_directories(路径) 规定.so/.a库文件路径
target_link_libraries(库文件名称/可执行文件名称 链接的库文件名称) 对add_library或者add_executable生成的文件进行链接操作,必须在add_executable 或 add_library 后面,用来去链接各种库
target_include_directories 编译需要包含的头文件目录
target_compile_definitions(目标 scope 编译标志) 设置某个目标的编译标志
target_compile_options(目标 scope 编译参数) 只会添加到指定的目标上
if(CMAKE_HOST_SYSTEM_NAME MATCHES “Linux”) 成立是linux系统环境
add_compile_options(-std=c++11) 使用c++11
add_definitions 添加预处理指令,添加到所有的目标上
find_package(第三方库 最低版本 REQUIRED(模块是必需的) COMPONENT(查找的库列表) filesystem system) 在系统和文件系统查找第三方库
add_compile_options(编译参数) 添加到所有目标上
install 将构建的目标(如可执行文件、库等)和其他相关文件(如头文件、配置文件等)安装到指定的位置

PRIVATE:只有目标自己会使用这些编译参数
PUBLIC:目标自己和其他依赖这个目标的目标都会使用这些编译参数
INTERFACE:只有其他依赖这个目标的目标会使用这些编译参数

宏变量含义

宏变量 解析
CMAKE_BINARY_DIR 运行cmake的目录。外部构建时就是build目录
CMAKE_SOURCE_DIR 根源代码目录,工程顶层目录。暂认为就是PROJECT_SOURCE_DIR
CMAKE_CURRENT_SOURCE_DIR 当前处理的 CMakeLists.txt 所在的路径
CMAKE_CURRENT_BINARY_DIR 当前所在build目录
PROJECT_SOURCE_DIR 本CMakeLists.txt所在的文件夹路径/工程顶层目录
PROJECT_BINARY_DIR 暂认为就是CMAKE_BINARY_DIR
PROJECT_NAME 本CMakeLists.txt的project名称

你可能感兴趣的:(linux,Windows,跨平台,cmake,跨平台)