c++ github actions ci配置 c++项目如何配置github actions进行自动化构建

浅晨吖_1425

浅晨吖_1425

2026-03-21

727人浏览

原创

选 ubuntu-20.04 更稳,避免 ubuntu-latest 切换至 22.04 导致 gcc/abi/cmake 版本不兼容;需显式安装对应 dev 包、正确使用 threads::threads、启用 cmake_cxx_standard_required 并显式运行 ctest。

c++ github actions ci配置 c++项目如何配置github actions进行自动化构建

GitHub Actions 里用 ubuntu-latest 还是 ubuntu-20.04?

选 ubuntu-20.04 更稳。虽然 ubuntu-latest 看起来省心,但它可能突然切到 22.04,而后者默认带 gcc-11,如果你的 C++ 项目依赖 gcc-9 或 gcc-10(比如用了某些旧版 libstdc++ ABI),CI 就会静默链接失败或运行时报 GLIBCXX_3.4.29 not found。

  • 显式写死 ubuntu-20.04,避免环境漂移
  • 如果必须用新系统,就同步指定编译器:sudo apt install g++-12 并用 CXX=g++-12 覆盖
  • ubuntu-22.04 自带 cmake 3.22,但很多老项目 CMakeLists.txt 要求 3.10 以上即可,别盲目升级

如何让 cmake 正确找到 Boost 或 OpenCV?

GitHub Actions 默认不装第三方库,find_package(Boost) 直接报 Could not find Boost 是常态。别指望 apt install libboost-all-dev 全能覆盖——它装的是头文件+常用动态库,但如果你项目用 Boost::filesystem 且开了 STATIC 链接,就得额外装 libboost-filesystem-dev 和 libboost-system-dev。

  • 先查文档:对应 Ubuntu 版本下,库的 dev 包名是什么(比如 libopencv-dev 对应 OpenCV 4.x,libopencv-dev 在 20.04 是 4.2,22.04 是 4.5)
  • 用 apt list --installed | grep boost 在调试 job 里确认实际装了哪些
  • 若需特定版本(如 Boost 1.75),用 vcpkg 或 conan 更可靠,但会拖慢 CI 时间

make 报错 undefined reference to `pthread_create' 怎么办?

这不是你漏了 -lpthread,而是 CMake 默认没开 Threads::Threads 导入目标。现代 CMake 推荐用 target_link_libraries(myapp PRIVATE Threads::Threads),而不是手写 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") —— 后者会让所有 target 都带 pthread,还可能干扰 sanitizer 编译。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 检查 CMakeLists.txt 里是否漏了 find_package(Threads REQUIRED)
  • 确认链接语句写在 add_executable 之后,且 target 名拼写一致(大小写敏感)
  • 如果用 add_compile_options(-pthread),记得同时加 add_link_options(-pthread),否则链接阶段仍失败

为什么 clang++ 编译通过,g++ 却报 error: ‘make_unique’ is not a member of ‘std’?

因为 std::make_unique 是 C++14 特性,而 GitHub Actions 的 g++-9 默认只认 -std=gnu++14,不是 -std=c++14;有些项目 CMake 设置了 set(CMAKE_CXX_STANDARD 14),但没设 set(CMAKE_CXX_STANDARD_REQUIRED ON),导致 g++ 降级到 c++98 模式编译。

  • 在 CMakeLists.txt 开头加 set(CMAKE_CXX_STANDARD_REQUIRED ON)
  • 显式指定方言:set(CMAKE_CXX_STANDARD 17) 比 14 更少踩坑(std::optional、std::string_view 更常用)
  • Clang 对标准宽松,G++ 更严格——CI 用 G++ 才更贴近实际 Linux 发行版环境

最常被跳过的其实是 ctest 的启用方式:光写 add_test 不够,得在 CI step 里显式跑 cmake --build build --target test 或 ctest --test-dir build,否则测试永远不执行。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

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

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

下载

相关标签:

c++

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

相关专题

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

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

2023.10.18

949

5

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

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

2023.10.25

2780

5

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

2023.07.31

11705

4

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

5507

7

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2025.12.25

2516

7

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

2026.01.21

8465

27

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

2026.04.02

838

19

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3970

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3393

10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习