news 2026/7/6 1:03:18

CMake语法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake语法

CMake是跨平台构建工具,通过CMakeLists.txt描述编译规则,生成 Makefile/VS工程/Ninja等,再调用编译器构建。

1. 基础规则

1.1主文件

CMakeLists.txt根目录必须有,大小写敏感。

1.2命令格式

① 不区分大小写

② 参数用空格/换行分隔,括号不能丢

③ 字符串含空格用双引号包裹

如:

add_executable(QMLTest04 main.cpp) set(CMAKE_PREFIX_PATH "D:/Qt/Qt6.11.1/6.11.1/mingw_64") target_link_libraries(QMLTest04 Qt::Core Qt::Gui Qt::Widgets )

1.3 注释

#注释内容

无多行注释,只有单行注释。

如:

#MESSAGE(WARNING "This is BINARY dir " ${QMLTest04_BINARY_DIR})

1.4 变量

定义/赋值:set(变量名 值)

取值:${变量名}

如:

set(CMAKE_PREFIX_PATH "D:/Qt/Qt6.11.1/6.11.1/mingw_64") set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")

2. 核心命令

2.1 最低版本要求

cmake_minimum_required(VERSION 4.2)

2.2 定义项目

2.2.1 设置项目、语言、版本

project(QMLTest04) project(MyProject LANGUAGES C CXX VERSION 1.0)

2.2.2内置自动变量

·${PROJECT_NAME}:项目名

·${PROJECT_SOURCE_DIR}项目根目录(源码根路径)

·${PROJECT_BINARY_DIR}构建目录(编译输出目录)

MESSAGE( "项目名称:" ${PROJECT_NAME}) MESSAGE( "项目根目录:" ${PROJECT_SOURCE_DIR}) MESSAGE( "构建目录:" ${PROJECT_BINARY_DIR})

输出结果:

项目名称:QMLTest04 项目根目录:E:/C++/Demo/QMLTest04 构建目录:E:/C++/Demo/QMLTest04/cmake-build-debug

2.3 定义变量/列表

2.3.1 普通变量

set(APP_NAME TestApp) set(VERSION "1.0.0")

2.3.2 文件列表(多参数=列表)

set(SRCS main.cpp hello.cpp util.c )

2.4 生成可执行文件

编译源码为exe/可执行程序,语法:

add_executable(输出文件名 源码列表),如:

#单个源码 add_executable(QMLTest04 main.cpp) #多个源码 add_executable(demo main.cpp test.cpp) #使用变量(推荐,易维护) add_executable(demo ${SRCS})

2.5 生成库文件

# 1. 静态库 (.a / .lib) # add_library(库名 STATIC 源码文件) # 2. 动态库 (.so / .dll) # add_library(库名 SHARED 源码文件) set(LIB_SRCS func.cpp) add_library(mylib STATIC ${LIB_SRCS})

2.6 链接库

给目标(可执行文件/库)链接依赖库,语法:

target_link_libraries(目标名 库名1 库名2 ...)

示例:

# 可执行文件demo链接静态库mylib target_link_libraries(demo mylib)

2.7 头文件搜索路径

添加.h/.hpp头文件目录,编译时能直接#include "xxx.h"

include_directories(头文件目录路径)

常用搭配(相对路径):

include_directories(${PROJECT_SOURCE_DIR}/include)

现代CMake更推荐target_include_directories(作用范围更精准):

target_include_directories(demo PRIVATE ${PROJECT_SOURCE_DIR}/include)

3. 路径与常用内置变量

不用手动定义,CMake自带:

${CMAKE_SOURCE_DIR} # 整个工程根目录 ${CMAKE_BINARY_DIR} # 顶层构建目录 ${CMAKE_CURRENT_SOURCE_DIR} # 当前 CMakeLists.txt 所在目录 ${CMAKE_CURRENT_BINARY_DIR} # 当前目录对应的构建目录 # 编译器相关 ${CMAKE_C_COMPILER} # C 编译器 ${CMAKE_CXX_COMPILER} # C++ 编译器

4. 条件判断if语法

4.1 基础判断

if(条件) 命令... elseif(其他条件) 命令... else() 命令... endif()

4.2 常用条件

# 判断变量是否存在/非空 if(DEFINED APP_NAME) # 判断操作系统 if(WIN32) message("当前是 Windows") elseif(UNIX) message("当前是 Linux/Mac") endif() # 判断文件/目录是否存在 if(EXISTS ${PROJECT_SOURCE_DIR}/include)

4.3 逻辑运算

·AND并且

·OR或者

·NOT取反

if(WIN32 AND EXISTS ${PROJECT_SOURCE_DIR}/lib)

5. 循环

# 遍历文件列表 foreach(file ${SRCS}) message("文件: ${file}") endforeach() # 数字遍历 1~5 foreach(i RANGE 1 5) message("数字: ${i}") endforeach()

6. 打印信息

message("普通日志") message(STATUS "状态信息") # 标准输出 message(WARNING "警告") message(FATAL_ERROR "致命错误,终止编译")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 10:43:46

从方波到精准定位:解码正交编码器四倍频技术的核心原理

1. 正交编码器与方波信号的基础认知 第一次接触正交编码器时,我盯着A、B两相的方波信号看了整整半天。这两组看似简单的矩形波,怎么就能实现精密的位置测量呢?后来在调试数控机床时才发现,这组相位差90度的方波,其实是…

作者头像 李华
网站建设 2026/7/3 1:14:46

终极指南:如何用Attu轻松管理Milvus向量数据库

终极指南:如何用Attu轻松管理Milvus向量数据库 【免费下载链接】attu The Best GUI for Milvus 项目地址: https://gitcode.com/gh_mirrors/at/attu Attu是专为Milvus向量数据库设计的现代化管理工具,让你在AI时代轻松驾驭向量数据。无论你是开发…

作者头像 李华
网站建设 2026/7/2 2:51:36

Hi7001替代H5112A:100V输入与模拟/PWM双模调光的国产升级方案

在降压型LED恒流驱动方案选型中,封装兼容性与调光灵活性往往是硬件工程师评估替代方案时的核心考量。Hi7001与H5112A均采用SOP-8封装,管脚定义高度兼容,在无需改动PCB布局的前提下,Hi7001提供了更宽的输入电压范围以及模拟调光与P…

作者头像 李华
网站建设 2026/7/3 19:49:53

Outfit字体:9种字重免费开源,打造专业品牌视觉系统

Outfit字体:9种字重免费开源,打造专业品牌视觉系统 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts 在数字化设计时代,品牌视觉一致性是专业形象的核心。Outfit…

作者头像 李华
网站建设 2026/7/3 13:29:15

华硕笔记本GPT分区转MBR实战:Win7系统安装全流程拆解

1. 为什么需要GPT转MBR分区? 很多老用户对Win7系统情有独钟,特别是习惯了经典开始菜单和稳定性能的用户。但现在的华硕新款笔记本基本都是预装Win10系统,采用GPT分区格式。这就带来了一个棘手的问题:Win7系统无法直接在GPT分区上安…

作者头像 李华
网站建设 2026/7/3 18:22:37

终极指南:如何使用CXPatcher提升CrossOver游戏兼容性

终极指南:如何使用CXPatcher提升CrossOver游戏兼容性 【免费下载链接】CXPatcher A patcher to upgrade Crossover dependencies and improve compatibility 项目地址: https://gitcode.com/gh_mirrors/cx/CXPatcher 你是否曾经因为CrossOver无法流畅运行Win…

作者头像 李华