CMake核心用法(贴合C++编译场景)
CMake是C项目中常用的跨平台构建工具核心作用是如Makefile、VS项目文件解决不同平台Windows、Linux、Mac编译差异的问题尤其适合多文件、多目录的C项目比如包含构造函数、析构函数的类文件编译。以下是CMake的基础用法从核心概念到实操步骤贴合C学习场景逐步讲解。1. CMake核心基础必学覆盖80%基础场景CMake的核心是CMakeLists.txt文件文件名固定不可修改所有构建规则都写在该文件中CMake会根据该文件生成对应的编译脚本再通过编译工具如make、VS编译器完成项目编译。1核心命令基础必记cmake_minimum_required(VERSION 3.20)指定CMake的最小版本必填放在文件第一行版本过低会导致部分命令无法使用建议选择3.10及以上版本。project(项目名 [LANGUAGES CXX])定义项目名称可选指定支持的语言CXX代表C不写则默认支持C/C。可通过${PROJECT_NAME}引用项目名${PROJECT_SOURCE_DIR}引用项目源码根目录。set(变量名 变量值)设置变量用于存储路径、源文件列表、编译参数等引用变量时需用${变量名}。例如set(CMAKE_CXX_STANDARD 17)指定C编译标准为17set(SRC_LIST main.cpp student.cpp)存储所有源文件路径[2]。add_executable(可执行文件名 源文件列表)生成可执行文件第一个参数是最终生成的可执行文件名后面跟所有需要编译的.cpp文件。include_directories(头文件路径)指定头文件搜索路径当.h文件和.cpp文件不在同一目录时必须添加该命令否则编译器会找不到头文件。2. 实操步骤以多文件C项目为例假设我们有一个包含构造函数、析构函数的C项目结构如下贴合之前的Student类示例StudentProject/ ├── include/ # 头文件目录 │ └── Student.h # 包含Student类的声明构造、析构、成员函数声明 ├── src/ # 源文件目录 │ ├── Student.cpp # 包含Student类的实现构造、析构、成员函数定义 │ └── main.cpp # 主函数创建对象、调用成员函数 └── CMakeLists.txt # CMake配置文件核心1编写CMakeLists.txt文件# 1. 指定CMake最小版本 cmake_minimum_required(VERSION 3.20) # 2. 定义项目名称指定支持C project(StudentProject LANGUAGES CXX) # 3. 设置C编译标准与代码兼容如C11、C17 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制使用指定的C标准 # 4. 指定头文件搜索路径include目录 include_directories(${PROJECT_SOURCE_DIR}/include) # 5. 设置源文件列表src目录下的所有.cpp文件 set(SRC_FILES ${PROJECT_SOURCE_DIR}/src/Student.cpp ${PROJECT_SOURCE_DIR}/src/main.cpp ) # 6. 生成可执行文件可执行文件名StudentApp依赖的源文件SRC_FILES add_executable(StudentApp ${SRC_FILES})2执行CMake构建跨平台通用步骤CMake的构建遵循“out-of-source”源码外构建原则建议创建单独的build目录避免编译文件污染源码目录步骤如下创建build目录在项目根目录StudentProject下执行命令mkdir buildWindows可手动创建。进入build目录执行cd build。生成编译脚本执行cmake ..“..”表示CMakeLists.txt在上级目录此时会在build目录下生成MakefileLinux/Mac或VS项目文件Windows。编译项目执行cmake --build .通用命令或Linux/Mac执行makeWindows打开生成的.sln文件编译最终会在build目录下生成可执行文件StudentApp.exe/StudentApp。3. 常用进阶用法贴合C项目需求搜索源文件当src目录下文件较多时可使用aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_FILES)自动检索src目录下所有.cpp文件并存储到SRC_FILES变量中无需手动罗列。生成静态库/动态库使用add_library(库名 STATIC/SHARED 源文件)STATIC表示静态库SHARED表示动态库适合将类封装为库供其他项目调用。嵌套CMake大型项目可拆分目录在子目录下创建CMakeLists.txt父目录通过add_subdirectory(子目录名)调用子目录的配置实现模块化编译。设置编译参数通过set(CMAKE_CXX_FLAGS -Wall -g)添加编译参数-Wall显示所有警告-g生成调试信息方便调试包含构造/析构的代码。4. 关键注意事项CMakeLists.txt文件名必须严格一致大小写敏感如不能写成cmakelists.txt否则CMake无法识别。路径引用建议使用${PROJECT_SOURCE_DIR}等内置变量避免写绝对路径保证项目可移植跨平台、跨目录。修改CMakeLists.txt后需重新执行cmake ..更新编译脚本再执行编译命令。Windows环境下若未安装VS可安装MinGW执行cmake .. -G MinGW Makefiles生成MinGW可用的Makefile再用mingw32-make编译。补充说明CMake的核心价值是“跨平台”和“简化编译配置”尤其适合多文件C项目比如包含多个类、多个源文件的项目后续学习继承、多态时多文件编译会频繁用到CMake掌握上述基础用法即可应对大部分学习场景。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2463001.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!