2026/4/6 9:45:21
网站建设
项目流程
旅游网站开发难吗,多语言版本网站,查询网站信息,wordpress迁移数据库CMake 基础教程#xff1a;从零开始掌握核心概念
CMake 是现代 C/C 项目最主流的构建系统工具#xff0c;它不直接编译代码#xff0c;而是根据你写的 CMakeLists.txt 文件生成平台原生的构建脚本#xff08;如 Makefile、Ninja、Visual Studio 项目等#xff09;。本篇聚…CMake 基础教程从零开始掌握核心概念CMake 是现代 C/C 项目最主流的构建系统工具它不直接编译代码而是根据你写的CMakeLists.txt文件生成平台原生的构建脚本如 Makefile、Ninja、Visual Studio 项目等。本篇聚焦基础帮助你快速上手最常用的命令和写法。1. CMake 的基本工作流程编写CMakeLists.txt项目配置文件在构建目录执行cmake源码路径# 配置阶段生成构建系统Makefile 等cmake --build.# 构建阶段真正编译推荐始终使用源码外构建out-of-source buildmkdirbuildcdbuild cmake..# .. 表示源码目录cmake --build.2. 最简 Hello World 项目项目结构hello/ ├── CMakeLists.txt └── main.cppmain.cpp#includeiostreamintmain(){std::coutHello CMake!std::endl;return0;}CMakeLists.txt基础必备三行cmake_minimum_required(VERSION 3.10) # 1. 指定 CMake 最低版本 project(HelloCMake # 2. 定义项目名称可选指定语言 VERSION 1.0 DESCRIPTION My first CMake project LANGUAGES CXX) # 只启用 C默认启用 C 和 CXX add_executable(hello main.cpp) # 3. 生成可执行目标 hello构建运行mkdirbuildcdbuild cmake..cmake --build../hello# Linux/macOS# 或 hello.exe # Windows3. 核心基础命令详解命令作用常用写法cmake_minimum_required(VERSION x.y)指定 CMake 最低版本避免旧版本兼容问题cmake_minimum_required(VERSION 3.15)project(name)定义项目名称、版本、描述、语言project(MyApp LANGUAGES CXX C)add_executable(target sources...)创建可执行文件目标add_executable(app main.cpp util.cpp)add_library(target [STATICSHAREDMODULE] sources…)target_include_directories(target scope dirs...)为目标添加头文件搜索路径target_include_directories(app PRIVATE include)target_link_libraries(target scope libs...)为目标链接库target_link_libraries(app PRIVATE pthread fmt)set(CMAKE_CXX_STANDARD 17)全局设置 C 标准set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)scope作用域说明PRIVATE只影响当前目标编译时使用INTERFACE只影响依赖当前目标的其他目标PUBLIC两者都影响最常用4. 指定 C 标准非常重要推荐方式现代 CMake# 方法1全局设置简单 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 方法2目标级别更灵活推荐 target_compile_features(myapp PRIVATE cxx_std_17) # 支持 11/14/17/20/235. 多文件项目基础示例项目结构myapp/ ├── CMakeLists.txt ├── main.cpp ├── include/ │ └── utils.h └── src/ └── utils.cppCMakeLists.txtcmake_minimum_required(VERSION 3.15) project(MyApp LANGUAGES CXX) add_executable(myapp main.cpp src/utils.cpp ) target_include_directories(myapp PRIVATE include) # 添加 include 目录 target_compile_features(myapp PRIVATE cxx_std_17)6. 基础变量一览变量含义示例${PROJECT_NAME}项目名称MyApp${CMAKE_SOURCE_DIR}项目根源码目录/path/to/myapp${CMAKE_BINARY_DIR}构建目录/path/to/myapp/build${CMAKE_CURRENT_SOURCE_DIR}当前 CMakeLists.txt 所在目录用于子目录${CMAKE_CXX_COMPILER}使用的 C 编译器g / clang / cl.exe7. 常用构建类型cmake..-DCMAKE_BUILD_TYPEDebug# 调试版带 -gcmake..-DCMAKE_BUILD_TYPERelease# 发布版带 -O3在多配置生成器如 Visual Studio中可在 IDE 中切换 Debug/Release。8. 基础小结 checklist一个合格的基础CMakeLists.txt通常包含cmake_minimum_required(VERSION 3.15) # 现代版本起点 project(MyProject VERSION 1.0 LANGUAGES CXX) add_executable(${PROJECT_NAME} # 使用项目名作为目标名 main.cpp src/file1.cpp src/file2.cpp) target_include_directories(${PROJECT_NAME} PRIVATE include) target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)掌握以上内容你已经能管理 90% 的小型到中型 C 项目了后续可以继续学习子目录管理add_subdirectory()查找外部库find_package()安装规则install()测试add_test() CTest如果你想看更具体的例子如添加第三方库、静态/动态库分离、多目录结构等随时告诉我我继续深入讲解