CMakeLists语法

1. 介绍

 基于CMake的构建系统是由一组高级抽象的逻辑目标(target)构成的,每个目标对应一个可执行文件、库文件,或者是一个由自定命令组成的自定义目标。在构建系统中通过确定目标之间的依赖关系,来确定构建顺序以及生成规则。
 CMake本身是跨平台的,它可以生成适合各种操作系统和编译器的构建文件。基于CMake的编译过程主要有以下步骤:

  1. 编写CMakeLists.txt文件:mkdir build && cd build && cmake ..通过cmake ..指向CMakeLists.txt所在目录。
  2. cmake命令将CMakeLists.txt文件转化为make所需要的Makefile文件:cmake ..会在build目录下生成Makefile文件。
  3. make命令编译源码生成可执行文件或库:make根据生成的Makefile文件,编译程序。

2. 基础用法

2.1. 二进制目标(Target)

 可执行文件和库是使用 add_executable() 和 add_library() 命令定义的。生成的二进制文件具有适合目标平台的 PREFIX、SUFFIX 和扩展名。二进制目标之间的依赖关系使用 target_link_libraries() 命令表示:

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

由archive.cpp、zip.cpp、lzma.cpp编译为archive静态库文件,由zipapp.cpp编译为一个可执行文件,在zipapp文件时会把archive文件链接过来。

2.2. 添加可执行文件

通过add_executable命令来定义一个可执行可执行文件目标。

add_executable(my_app
    src/main.cpp
    src/utils.cpp
    src/module/foo.cpp
)

2.3. 采集源文件

显示声明

set(APP_SOURCES
    src/main.cpp
    src/module1/foo.cpp
)

set(MODULE2_SOURCES
    src/module2/bar.cpp
    src/module2/baz.cpp
)

add_executable(target ${APP_SOURCES} ${MODULE2_SOURCES})

2.4. 采集头文件

显示声明(推荐)

声明包含目录,target_include_directories 为特定的目标(可执行文件或库)指定头文件搜索路径,可以为不同的目标设置不同的头文件路径。

# 适用于接口明确的库项目
set(PUBLIC_HEADERS
	${CMAKE_SOURCE_DIR}/hello/include
	${CMAKE_SOURCE_DIR}/world/include
)

# 将头文件关联到目标
target_include_directories(target PUBLIC ${PUBLIC_HEADERS})
  • PRIVATE:仅对当前目标可见。
  • PUBLIC:对当前目标和链接到它的其他目标可见。
  • INTERFACE:仅对链接到它的其他目标可见(用于纯头文件库)。

2.5. 添加库文件

创建库文件

add_library命令创建库文件,该命令可以指定库的类型(静态库STATIC或共享库SHARED)。

链接库文件

# 推荐:直接使用绝对路径链接库
target_link_libraries(target PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/libcustom.so
)

2.6. 构建子目录

add_subdirectory命令可以将指定的子目录添加到当前的构建过程中。允许在主CMakeLists.txt文件里包含并处理其他子目录中的CMakeLists.txt文件,从而实现项目的模块化管理。当调用这个命令时,CMake会进入到指定子目录,执行其中的CMakeList.txt文件,将子目录中的目标(target)添加到整个项目的构建系统中。

3. 常用命令

 CMakeLists.txt 文件中的命令不区分大小写,但参数和变量是区分大小写的。

3.1. 项目命令

project(xxx):设置project名称。会自动创建PROJECT_SOURCE_DIR PROJECT_NAME两个变量。

  • ${PROJECT_SOURCE_DIR} : 本CMakeLists.txt所在的文件夹路径
  • ${PROJECT_NAME} : 本 CMakeLists.txt的project名称

3.2. 设置变量

set(变量 文件名/路径/...):给文件名/路径名或者其他字符串起别名,用${变量}获取变量内容。

设置编译模式

  1. 设置为 Release 模式:SET(CMAKE_BUILD_TYPE Release)
  2. 设置为 debug 模式:SET(CMAKE_BUILD_TYPE debug)

3.3. 其他

option命令可用来定义一个布尔类型的选项,用户能够通过 CMake GUI 或者命令行参数对其值进行修改。该命令常用于开启或关闭某个特定的功能。

file命令的READ选项可以读取文件内容并将其赋值给变量。

execute_process命令可以执行外部命令,并将命令的输出结果赋值给变量。

[1] 新手入门学习cmake及CMakeLists.txt的超详细指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值