Linux下gcc与g++用法以及编写makefile

菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序 菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序 四年前我发布了一篇菜鸟攻略–C语言多文件编程初探(一),没想到这篇文章成了我博客上阅读量最多,评论数也最多的文章。当时我读大二样子,对学习 C 语言有着强烈的兴趣。本来是想写一个系列的,所以文章标题中有个(一)。当初计划的是第二篇写通过命令行调用 gcc 工具手动编译程序,在写一篇使用 makefile 的。后来回头看... 阅读详情
(本文主要以gcc为演示,如果是C++程序直接将给 gcc改为g++即可)
1.         gcc与g++编译流程:
1)         编译流程:

2)         预处理:生成.i的预处理文件。
Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件。
Ø 演示:

3)         编译:生成.s的编译文件。
Ø 只激活预处理和编译,把文件编译成汇编代码。
Ø 演示:

4)         汇编:生成.o的汇编文件。
Ø 只激活预处理、编译和汇编,把程序做成obj文件。
Ø 演示:

5)         链接:生成链接文件。
Ø 激活预处理、编译、汇编和链接。
Ø 演示:

6)         惯用:

2.         gcc与g++常用参数介绍:
1)         -E
Ø -E选项指示编译器仅对输入文件进行预处理。当这个选项被使用时,预处理器的输出被送到标准输出而不是储存在文件里。
Ø 演示:

2)         -S
Ø -S选项告诉GCC在为C代码产生了汇编语言文件后停止编译。GCC产生的汇编语言文件的缺省扩展名是.s。
Ø 演示:

3)         -c
Ø -c选项告诉GCC仅把源代码编译为目标代码。缺省时GCC建立的目标代码文件有一个.o的扩展名。
Ø 演示:

4)         -o
Ø -o选项来为将产生的可执行文件用指定的文件名。
Ø 演示:

5)         -O
Ø -O选项告诉GCC对源代码进行基本优化,这些优化在大多数情况下都会使程序执行的更快,优化分为4个等级(-O0,-O1,-O2,-O3)。
-O0表示没有优化。
-O1为缺省值,主要进行跳转和延迟退栈两种优化。
-O2除了完成-O1的优化之外,还进行一些额外的指令调整工作。
-O3除了完成-O2的优化之外,还进行包括循环展开和其他一些与处理特性相关的优化工作。
Ø 演示:

其他优化等级的用法与演示中-O3的用法一样。
6)         -x
Ø 设定文件编译所使用的语言,使后缀名无效。
Ø 演示:

7)         -C
Ø 在预处理的时候,不删除注释信息。
Ø 演示:

8)         -M
Ø 生成文件关联信息。包含目标文件所依赖的所有源代码。
Ø 演示:

2.         编写makefile:
1)         编写一个程序:
Ø 共5个文件,3个.cpp文件,2个.h文件。
Ø main.cpp:

 

Ø printf1.cpp:

 

Ø printf1.h:

 

Ø printf2.cpp:

 

Ø printf2.h:

Ø 常规编译:
l 汇编main.cpp:

l 汇编printf1.cpp

l 汇编printf2.cpp

l 将3个obj文件链接到一个文件上:

l 运行:

l 总共生成的文件:

2)         运用makefile文件:
Ø 优点:
由上例可知,照这样的编译方法,如果是一个项目的话,可能存在上百个文件,岂不是太麻烦了,所以要把编译过程写进一个文件中:makefile。
Ø 编写规则:
l 以#号开始的为注释
l 具体编译过程:
对象:依赖项
编译方式
l makefile文本向右缩进时使用TAB键,不能用空格代替。
Ø 编写(以上面得程序为例):
l 创建makefile文件:

l 编写makefile文件:
u 常用写法:

前三行类似一个变量的定义,取值时使用$(定义值)来取值。
u 也可以写成:

等价于上面的写法,缺点是文件一旦过多,修改也不容易。
l 运行makefile文件:

l 生成的文件:

l 运行目标文件:

l 删除生成文件:

linux下C++基本库的Hollo World程序  首先C++开发环境要安装好   原来linux自带了一个yum命令,还挺方便的。查看系统是否带有gcc等类库的命令如下:     gcc -v     g++ -v     c++ -v     如果出现个xxx not found那么指定的库就不存在了,于是可以利用yum安装,执行以下代码,可以一键安装好gcc、g++和c++库:     yum install gcc-c 阅读详情

相关推荐

Linux——gcc/g++以及make/Makefile的使用

在Linux的系统中,想要完成代码编译,gcc/g++是不可缺少的工具,而make/Makefile能否熟练应用则从一个侧面体现出一个人是否有能力独自完成一个大型工程,而本篇文章就带领大家了解一些gcc/g++和make/Makefile使用的基础知识。

zcxmjw的博客 1134

makefile和g++

简介 makefile 是一种描述软件工程使得编译规则和各个文件依赖关系的文件。 make 是一个命令工具,负责解释makefile 文件指令。是编译器标配的命令。 makefile 的编写规则 all: book1 book2 book1: book1.c gcc -o book1 book1.c book2: book2.c _public.h _public.c gcc -o book...

少爷想养猫的博客 1845

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南)

本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。

net55的博客 296

深度学习部署笔记(二): g++, makefile语法,makefile自己的CUDA编程模板

学习makefile

bobchen1017的博客 1410

(入门向)在Ubuntu22.04.3安装Matlab2021b,以及无法安装在当前目录下的解决办法(见最后)

还有这个/usr/local是只读状态,我试过sudo chmod..去改那个文件的读,结果还是安装不了,我不是这个默认路径,因为它文件夹还是只读,于是我在matlab2021b下创了一个bin,并选上。输入完成后,依次按y,因为里面有三个文件,他会让你确定3次密码,直接yyy跳过即可。你可能会遇到装不下的情况,这个软件占30g,可是你分配给虚拟机就剩10g。,于是我去Downloads下建了一个matlab2021b文件夹,果然好使,3).此时,会提示你输入密码,因为这个rar是有密码的,

harrype的博客 7287

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

Linux编译gcc/g++、自动化构建工具make/makefile

Linux中关于gcc/g++的基本操作,以及makefile的基本操作。

wjmhlh的博客 1249

逆向工程实战:解密AppleAccount的X-MMe-Nas-Qualify签名生成机制

本文通过逆向工程实战,详细解析了AppleAccount服务中X-MMe-Nas-Qualify签名的生成机制。作者利用Frida进行动态追踪定位签名源头,结合IDA Pro进行静态分析,并借助LLDB动态调试还原核心算法。文章最终分享了如何独立于苹果官方库,通过Python代码复现签名算法,为自动化测试和深度交互苹果服务的开发者提供了关键技术路径。

weixin_29323049的博客 707

如何创建 G++ Makefile 文件

对于各行业、各学科来说,C++ 仍然是最受欢迎的一种编程语言。这是有充分理由的。这意味着,目前存在多种可用的 C++ 工具,它们各有优缺点。其中,GNU 编译器套件 (GCC) 具有广泛的特性和能力,因此是最受欢迎的工具之一。随着这种的工具的普及,GCC 及其 C++ 专用工具,特别是标准 G++ makefile 文件,都值得深入研究。

讨论软件开发加速、持续集成/持续交付(CI/CD)、C++、开发者生产力以及所有相关话题。 451

图神经网络实战(2)——图论基础

图论 (Graph theory) 是数学的一个基本分支,涉及对图研究。图是复杂数据结构的可视化表示,有助于理解不同实体之间的关系。图论提供了大量建模和分析现实问题的工具,如交通系统、社交网络和互联网等。在本节中,将介绍图论的基本原理,主要涉及三个方面:图属性、图概念和图算法。

盼小辉丶的博客 1万+

AI智能体实战:从LangChain到多智能体协作的自动化新范式

在人工智能技术快速发展的今天,大语言模型(LLM)已成为推动自动化变革的核心驱动力。其原理在于通过深度学习海量文本数据,使模型能够理解、生成自然语言并执行推理任务。这一技术进步催生了AI智能体(AI Agent)这一新兴概念,它赋予自动化系统自主决策和动态规划能力,从而突破了传统脚本和RPA工具在固定流程上的局限。从技术价值看,AI智能体框架通过封装LLM调用、工具集成与流程编排,显著降低了构建复杂人机协同应用的开发门槛。在实际应用场景中,智能体尤其擅长处理信息调研、内容创作辅助、数据分析等需要处理非结构化

weixin_33730836的博客 773

g++ linux 编译开栈_Linux下gcc与g++用法以及编写makefile

(本文主要以gcc为演示,如果是C++程序直接将给 gcc改为g++即可)1.gcc与g++编译流程:1)编译流程:2)预处理:生成.i的预处理文件。Ø只激活预处理,这个不生成文件,需要把它重定向一个输出文件。Ø演示:3)编译:生成.s的编译文件。Ø只激活预处理和编译,把文件编译成汇编代码。Ø演示:4)汇编:生成.o的汇编文件。Ø只激活预处理、编译和汇编,把程序做成obj文件。Ø演示:5)链接:生...

weixin_39960920的博客 130

RK3588 平台部署实战:OpenCV + LibTorch + FFmpeg 环境搭建与深度学习推理全流程解析

现在,你已经掌握了在RK3588上搭建OpenCV+LibTorch+FFmpeg环境的完整流程,也完成了深度学习模型的部署测试。不妨从一个具体的应用场景入手(如检测自家宠物的品种),亲手打造属于你的第一个边缘智能应用——当你看到模型在RK3588上精准输出结果时,你会发现:嵌入式深度学习的门槛,其实并没有想象中那么高。这些依赖是编译OpenCV、FFmpeg的基础,安装过程中若提示权限不足,可在命令前加。若能输出预测的类别索引,则说明环境搭建成功,模型推理流程通畅。文件,实现模型加载、图像预处理与推理。

FJN110的博客 535

【Linux】开发工具入门指南,轻松掌握你的开发利器

一文带你由浅入深掌握Linux之开发工具

m0_74808907的博客 2867

030、自动白平衡AWB实战:灰度世界、完美反射与色温估计的工程实现与局限

本文深入探讨了自动白平衡(AWB)算法在工程实践中的实现与局限性。作者结合实际项目经验,分析了灰度世界算法、完美反射算法和色温估计三种主流方法的优缺点和适用场景,并分享了调试过程中的关键技巧和常见陷阱。文章指出,纯色背景、多光源环境等特殊场景容易导致算法失效,需要通过混合策略和场景检测来优化。作者强调AWB调试需要大量实际场景测试,建议保留手动调节功能,并针对不同硬件配置进行参数标定。最后提出,AWB优化是一个持续迭代的过程,需要工程化的测试方法和数据处理能力。

zzfmlxs的博客 283

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

关于Linux下C/C++程序编译

 在编译之前我们需要在系统里安装G++ GCC,它们就是Linux下的C++/C的编译器。代码如下代码:sudo apt-get install build-essentialsudo apt-get install gccsudo apt-get install g++好,现在我们在文本编辑器里写一个C的简单的程序(好像所有学习C或者C++的书都会出现)代码:#include int main(

阿丹的池塘 995

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux的开发工具

Linux开发工具详解

CL2426的博客 1808

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux 编译器 gcc 与 g++

gcc全称 GNU Compiler Collection,是 GNU 项目开发的一款功能强大的编译器集合。它最初是作为 GNU C 语言编译器而开发的,随着不断发展,如今已支持 C、C++、Objective-C、Fortran、Ada 等多种编程语言。g++实际上是gcc的一个 “马甲”,它是gcc专门用于编译 C++ 代码的前端工具,通过调用gcc的底层编译功能,针对 C++ 语言的特性进行处理,以确保 C++ 代码能够被正确编译。1.1 make 工具。

zzh_Zao的博客 2742

【Linux系统】第五节—编译器gcc/g++和自动化构建makefile/Makefile(详解)

GCC/G++编译器是C/C++程序开发中常用的工具,其编译过程主要包括预处理、编译、汇编和链接四个阶段。预处理阶段进行宏替换、去注释、条件编译和头文件展开等操作;编译阶段生成汇编代码;汇编阶段将汇编代码转换为机器可识别的目标代码;链接阶段将目标文件和库文件链接生成可执行文件。GCC提供了多种编译选项,如-E用于预处理,-S生成汇编代码,-c生成目标代码,-o指定输出文件。链接方式分为静态链接和动态链接,静态链接将库文件代码全部加入可执行文件,动态链接则在程序运行时加载库文件。Makefile用于自动化构建

稻草人 1487

【Linux基础开发工具】gcc/g++使用&&make/Makefile

了解完vim编辑器的使用,接下来就可以尝试写一写代码啦,本期我将会向大家介绍Linux环境下,gcc/g++的使用方法,以及一些使用技巧。本文介绍的gcc/g++以及make/makefile都是在日常工作中常用的工具,make和makefile用于自动化构建过程,特别是在大型项目中。

2202_75605090的博客 2729
上一篇: Linux系统下使用chmod命令修改文档及文件夹权限
下一篇: Ubuntu 12.04 安装设置gcc4.4
LuckyJiang.2021
博客等级 码龄15年 217粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值