0

0

c++怎么编写简单的MakeFile_c++工程编译脚本【指南】

穿越時空

穿越時空

发布时间:2026-03-11 14:02:32

|

566人浏览过

|

来源于php中文网

原创

makefile中需显式定义c++编译规则,如%.o: %.cpp并用g++ -c $

c++怎么编写简单的makefile_c++工程编译脚本【指南】

Makefile 里怎么写 C++ 编译规则

直接写 g++ 命令就行,但得把源文件、目标文件、依赖关系和编译选项串对。别指望 Make 自动识别 .cpp 文件该用什么命令——它默认只认 .ccc,C++ 必须显式定义规则。

常见错误现象:make: *** No rule to make target 'main.o', needed by 'app'. Stop.,本质是没告诉 Make 如何把 main.cpp 变成 main.o

  • 必须加一条模式规则:%.o: %.cpp,后面跟 g++ -c $
  • $ 是第一个依赖(即 <code>.cpp 文件),$@ 是目标(即 .o 文件),别手滑写成 $* 或漏掉 -c
  • 如果用了 C++17 特性,记得在编译选项里加 -std=c++17,否则默认可能是 C++98,报错像 error: 'optional' is not a member of 'std'

头文件修改后不重新编译?检查依赖生成方式

手动写 main.o: main.cpp utils.h 看似稳妥,但工程一多就崩——你根本记不住谁 include 了谁。Makefile 本身不解析 #include,得靠编译器帮我们生成依赖项。

使用场景:改了 vector<string></string> 相关逻辑,结果 make 说“全是最新”,运行却崩,大概率是头文件变更没触发重编译。

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

蛙蛙写作——超级AI智能写作助手
蛙蛙写作——超级AI智能写作助手

蛙蛙写作辅助AI写文,帮助获取创意灵感,提供拆书、小说转剧本、视频生成等功能,是一款功能全面的AI智能写作工具。

下载
  • 在编译 .o 时加 -MMD -MP:前者生成 .d 依赖文件,后者让 Make 能安全处理头文件被删的情况
  • 在 Makefile 开头加 -include *.d,让 Make 读取这些自动生成的依赖
  • 别用 -MM(它忽略系统头文件)或漏掉 -MP,否则删掉某个头文件后可能报 No rule to make target 'xxx.h'

如何避免反复链接整个工程

链接阶段最慢,所以得确保只在必要时才执行 g++ -o app main.o util.o。核心是让可执行文件明确依赖所有 .o,且每个 .o 又依赖自己的源和头文件。

性能影响:如果写成 app: *.cpp,每次 make 都会重新编译全部源文件,哪怕只改了一行注释。

  • 目标写成 app: main.o util.o,不是 app: *.o —— 后者在空目录下会让 Make 报 *** No rule to make target '*.o'
  • 如果用 $(wildcard *.o),确保先有 .o 文件再运行 make,否则变量展开为空,链接命令直接失效
  • -Wall -Wextra 到链接命令里没意义,那是编译阶段的选项;链接时加 -static-libstdc++ 才能避免运行时缺 libstdc++.so

跨平台或换编译器时容易栽在哪

Linux 下用 g++ 写的 Makefile,在 macOS 上跑 clang++ 可能卡在 -fPICstd=c++17 写法差异上;Windows 的 MinGW 甚至不认 rm -f

兼容性影响:一个 CXX = g++ 看似简单,但没设 CXXFLAGSLDFLAGS 分离,后期切 clang 就得全局搜替换。

  • 开头定义 CXX ?= g++,问号表示“只在没设置时才赋值”,方便外部传参:make CXX=clang++
  • 删除命令统一用 $(RM),并在开头写 RM = rm -f;Windows 用户可改 RM = del /f(但更建议用 WSL)
  • 别硬编码路径如 /usr/local/include/boost,用 -I$(BOOST_INC),通过 make BOOST_INC=/opt/boost/include 注入

最容易被忽略的是:Make 对 Tab 键极其敏感,任何命令行前混入空格都会报 Makefile:5: *** missing separator,而且这个错误不会告诉你哪一行——得逐行检查缩进。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

scripterror怎么解决
scripterror怎么解决

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

492

2023.10.18

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

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

377

2023.10.25

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1476

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1169

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

835

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

462

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2361

2023.08.08

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共94课时 | 11万人学习

C 教程
C 教程

共75课时 | 5.3万人学习

C++教程
C++教程

共115课时 | 21.3万人学习

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

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