如何为c++项目编写一个简单的Makefile g++编译自动化【入门教程】


c++kquote>Makefile自动编译C++项目需定义目标、依赖和命令三部分,命令行以Tab开头;支持单文件编译、多文件分离编译链接、编译选项配置及clean清理规则,并可利用自动推导和变量简化维护。

如何为c++项目编写一个简单的makefile g++编译自动化【入门教程】

用 Makefile 自动编译 C++ 项目,核心是告诉 make 哪些文件变了需要重编、怎么调用 g++ 编译和链接。一个最简可用的 Makefile 只需三部分:目标(target)、依赖(prerequisites)、命令(recipe),且命令行必须以 Tab 开头。

基础结构:从单个 .cpp 文件开始

假设你只有一个源文件 main.cpp,想生成可执行文件 app

app: main.cpp
 g++ -o app main.cpp

保存为 Makefile(注意大小写和无后缀),在终端运行 make 即可生成 app。再次运行 make 时,如果 main.cpp 没变,make 会提示 “up to date”,不会重复编译。

支持多文件:分离编译与链接

当项目有 main.cpputils.cpputils.h 时,应先分别编译为对象文件(.o),再统一链接,避免全量重编:

  • main.o: main.cpp utils.h —— 表示 main.o 依赖这两个文件,任一修改就重新编译 main.cpp
  • utils.o: utils.cpp utils.h —— 同理
  • app: main.o utils.o —— 最终链接,只在 .o 文件变化时才执行 g++ -o app ...

app: main.o utils.o
 g++ -o app main.o utils.o

main.o: main.cpp utils.h
 g++ -c main.cpp

utils.o: utils.cpp utils.h
 g++ -c utils.cpp

加入常用编译选项和清理规则

实际开发中建议启用警告和标准版本,例如:

AI发型设计 AI发型设计

虚拟发型试穿工具和发型模拟器

AI发型设计 247 查看详情 AI发型设计
  • CXX = g++ —— 定义编译器变量,方便后续替换
  • CXXFLAGS = -Wall -std=c++17 -g —— 统一控制编译参数
  • clean: —— 自定义伪目标,用于删除中间文件

CXX = g++
CXXFLAGS = -Wall -std=c++17 -g

app: main.o utils.o
 $(CXX) $(CXXFLAGS) -o app main.o utils.o

main.o: main.cpp utils.h
 $(CXX) $(CXXFLAGS) -c main.cpp

utils.o: utils.cpp utils.h
 $(CXX) $(CXXFLAGS) -c utils.cpp

clean:
 rm -f *.o app

执行 make clean 就能清掉所有 .o 和可执行文件。

小技巧:自动推导与通配符简化

GNU make 能自动推导 .cpp → .o 的规则,所以你可以省略显式的 .o 规则,只写最终目标和清理项:

CXX = g++
CXXFLAGS = -Wall -std=c++17 -g
SRCS = main.cpp utils.cpp
OBJS = $(SRCS:.cpp=.o)
TARGET = app

$(TARGET): $(OBJS)
 $(CXX) $(CXXFLAGS) -o $@ $^

clean:
 rm -f $(OBJS) $(TARGET)

其中 $@ 表示当前目标名,$^ 表示全部依赖文件,$(SRCS:.cpp=.o) 是后缀替换函数。这样增删源文件只需改 SRCS 一行。

以上就是如何为c++++项目编写一个简单的Makefile g++编译自动化【入门教程】的详细内容,更多请关注其它相关文章!


# app  # 可执行文件  # 命令行  # 尼克  # 高性能  # 并在  # 译为  # 何为  # 器中  # c++  # ai  # js  # 只需  # 芝罘seo优化推广方式  # 英山seo推广方案  # 进企业进行营销推广  # 客户网站建设洽谈方案  # seo首页三大标签  # 网站建设的简答题  # 郑州哪里学seo好  # 武夷山网络seo哪个好  # seo优化区域  # 图片网站 推广  # 编译成 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  Python定时发送QQ消息  J*aScript与HTML元素交互:图片点击事件与链接处理教程  小红书如何引流到私信?引流到私信有用吗?  126手机126邮箱登录_126邮箱手机登录入口官网  Sublime怎么配置YAML文件格式化_Sublime YAML Formatter插件教程  《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐  顺丰速运官网查询入口 顺丰物流查询官网入口链接  易车网官网直达入口 易车网在线登录入口  《大周列国志》皇帝律令功能介绍  《雷电模拟器》截图方法介绍  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  OTT月报 | 2025年9月智能电视大数据报告  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  微信客户端如何找回密码_微信客户端忘记密码找回方法  Google Drive API 认证:服务账户与OAuth 2.0的选择与实践  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  Python模块化编程:避免循环导入与共享函数的最佳实践  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  《伊瑟》凶影追缉库卢鲁boss攻略  Python实战:高效处理实时数据流中的最小/最大值  Eclipse开发J*a快速入门  小红书网页版首页入口 小红书网页版电脑端官方登录链接  iPhone12是否要更新ios16  电子白板帮助菜单使用指南  《爱南宁》认证电动车方法  如何用mysql实现客户反馈管理_mysql客户反馈数据库方法  b站怎么用微信登录_b站微信登录方法  excel怎么制作考勤表 excel考勤模板与函数公式讲解  不吃碳水化合物是健康减肥的好办法吗  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  在Django单元测试中优雅处理信号:基于环境的条件执行策略  解决Flex容器横向滚动内容截断与偏移问题  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  192.168.1.1路由器后台入口 192.168.1.1默认登录入口  抖音号升级企业号怎么改名字?升级企业号有哪些好处?  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  Python中安全地将环境变量转换为整数的类型注解指南  PHP utf8_encode 字符编码转换疑难解析与最佳实践  VS Code中的Tailwind CSS IntelliSense插件使用技巧  2025SNH48年度青春盛典门票价格及购买方式  快手缓存清理方法  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  《书耽》更换手机号方法  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  抖音团长模式怎么做?团长模式是什么意思?  《深林》冬季章节图文攻略  在VS Code中利用AI辅助进行代码迁移 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.