0

0

c++如何使用cmake编译项目_c++ cmake编写入门【教程】

穿越時空

穿越時空

发布时间:2026-01-24 10:57:08

|

372人浏览过

|

来源于php中文网

原创

最简可用CMakeLists.txt需三步:cmake_minimum_required(VERSION 3.10)、project(MyApp LANGUAGES CXX)、add_executable(myapp main.cpp);头文件用target_include_directories(myapp PRIVATE include)指定路径;链接库须find_package()后显式target_link_libraries();构建务必在独立build目录中执行。

c++如何使用cmake编译项目_c++ cmake编写入门【教程】

直接用 CMake 编译 C++ 项目,核心不是写“教程”,而是让 CMakeLists.txt 正确描述你的源码结构、依赖和构建目标——写错一行 add_executable() 或漏掉 target_include_directories(),就会报错或链接失败。

怎么写最简可用的 CMakeLists.txt

从单个 main.cpp 开始,避免一上来就加子目录、库、测试。CMake 版本声明、项目名、可执行文件定义三步必须齐:

  • cmake_minimum_required(VERSION 3.10) —— 低于 3.10 的版本不支持 target_compile_features() 等常用功能,3.10 是当前安全下限
  • project(MyApp LANGUAGES CXX) —— 显式声明只用 C++,避免 CMake 自动启用 C 编译器导致奇怪警告
  • add_executable(myapp main.cpp) —— 文件名必须真实存在,路径是相对于 CMakeLists.txt 所在目录的;不能写成 add_executable(myapp ./src/main.cpp)(除非 CMakeLists.txt 在项目根目录且 src/ 是子目录)

头文件找不到?重点查 target_include_directories()

编译报错 fatal error: xxx.h: No such file or directory,90% 是没告诉 CMake 去哪找头文件。不要用全局 include_directories()(已过时且污染所有 target),改用 target 级别设置:

  • 如果头文件在 include/ 目录下:target_include_directories(myapp PRIVATE include)
  • PRIVATE 表示只影响 myapp 自身编译,不传递给依赖它的其他 target;要用 PUBLIC 只有当你封装的是库且头文件需被使用者包含时
  • 路径是相对路径,include 指的是 CMakeLists.txt 同级或子目录下的 include/;若头文件在 ../common/include,就得写 ../common/include

链接第三方库(如 pthreadfmt)必须分两步

只写 find_package(fmt REQUIRED) 不够,也不等于自动链接——CMake 只负责找到库位置,链接动作要显式触发:

IBM Watson
IBM Watson

IBM Watson文字转语音

下载

立即学习C++免费学习笔记(深入)”;

  • 系统库(如 pthread):target_link_libraries(myapp PRIVATE pthread)
  • CMake 包装过的库(如 fmt):find_package(fmt REQUIRED) + target_link_libraries(myapp PRIVATE fmt::fmt)(注意 :: 和别名,不是 fmt
  • 静态库文件(如 libz.a):target_link_libraries(myapp PRIVATE /path/to/libz.a),但更推荐用 add_library(z STATIC IMPORTED) 再链接,便于跨平台

构建命令别硬记,用好 build/ 目录隔离

永远不在源码目录运行 cmake .。CMake 生成的中间文件(CMakeCache.txtMakefile、对象文件)会污染源码树,且切换编译器或配置时极易出错:

  • 正确流程:mkdir build && cd build && cmake .. && make
  • 想换构建类型:cmake -DCMAKE_BUILD_TYPE=Release ..Debug 是默认值,但显式写出来更可控)
  • 修改了 CMakeLists.txt 后,进 build/ 目录重新运行 cmake .. 即可,不用删整个目录(除非改了 cmake_minimum_required 或变量作用域

真正卡住人的地方,往往不是语法,而是路径是否真实存在、target 名称是否拼错、PRIVATE/PUBLIC 是否用反、或者 find_package() 找到的库实际没安装——这些错误信息藏在 cmake .. 输出里,而不是 make 阶段。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

188

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

291

2023.10.25

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 50.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号