【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用

news2025/2/23 19:46:37

一.gcc的使用

在学习C语言时,我们了解了预处理阶段要做的事:->预处理

这其中会经历两个阶段:编译和链接

而编译又分为三个阶段:预编译,编译,汇编

通过不同的选项,可以让gcc停在以上相应的阶段。

   //-o 后面紧跟文件名,当然你也可以命名成其它名字
    gcc -E test.c -o test.i;   //告诉gcc,从现在开始进行程序的翻译,做完预处理工作后就停下来

	gcc -S test.i -o test.s   //从现在开始程序的翻译,编译工作做完后停下

	gcc -c test.c -o test.o   //做完汇编工作后停下
		                     //.o 文件可重定位目标二进制文件,简称目标文件,
		                     //不可以独立执行,需要经过链接才能执行
   
    gcc test.o -o test.exe  //连接,生成可执行文件或库文件


    //如果不想写这么麻烦,可以使用 -o 直接生成可执行文件
   gcc test.c -o test.exe

这里有一个记忆的小窍门,我们电脑左上角的Esc键,顺序刚好和上面的顺序一致,所以不记得的时候,看一眼电脑左上角,不过要记住大小写。

常用选项:

-g  :gcc默认是release版本,是不支持调试的,-g可以生成调试信息,但相应的文件的体积          会变大;

-static: 静态连接,文件体积也会变大

 

运行生成的可执行文件: ./test.exe

 

g++和gcc的使用差不多,就不赘述了。

 


二.make/makefile

make 是指令,makefile是文件,两个是配套使用的。

makefile文件格式:

//依赖关系(test是可执行文件,依赖源文件test.c生成,注意这个test.c文件必须在当前目录下 
//能找到
test:test.c    
    gcc test.c -o test;   //依赖方法,就是test.c 到可执行文件的生成方式
clean:             //clean无依赖关系
    rm -rf test;

 

所以我们现在要使用gcc编译生成可执行文件时,只需一次性把代码写到makefile文件里,在使用make命令就可以一件生成了,省去了重复写的麻烦,并且这个make是递归式生成的,所以写依赖关系和依赖方法时,不用担心顺序的问题。

不能重复make? 

可是我们发现一次make后,第二次就不能make了

这是因为make有这样一个规则:

 对于可执行文件和源文件的最后一次修改时间

     若可执行文件新于源文件,则不需要再次编译;

     若可执行文件老于源文件,则重新编译。

键入 stat 可查看文件的各个时间:

 

 项目清理

clean是负责项目清理的,我们希望它总是被执行,所以可以用.PHONY 修饰

.PHONY 是伪目标,伪目标的特性是总是被执行

 

常用符号

$@ :代替依赖关系:的左边

$^ :代替依赖关系:的右边(不管右边有几个文件,都可以用一个$^代替)

@:在依赖方法语句的前面加上@,可以在使用make时,不回显依赖方法的语句

 


🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGis Pro如何通过C#进行插件开发?

文章目录 0.引言1.开发工具准备2.VS(C#)创建ArcGIS Pro模块加载项3.编译并使用ArcGis Pro插件 0.引言 ArcGIS Pro插件(Add-ins)可以让用户更加容易的自定义和扩展ArcGIS Pro应用程序,它创建一系列自定义工具提供了一个…

ISO文件boot、dvd、minimal的区别

在centos的下载中,有分为boot、dvd、minimal的iso文件,那么他们之间有什么区别呢? boot.iso 这个版本大小不会超过1G ,只有最基本的启动引导等内容,各类包均需从线上下载,需要快速安装且有可靠网络的前提下&#xff0c…

linux中的数据库

目录 1.安装MySQL 2.创建数据库 3.删除数据库 4.查询创建数据库的语句 5使用数据库的语句 6.查询当前默认的数据库 7.查询使用的编码方式和校验规则 8.创建表的语句 9.表的物理存储结构 10.表的数据类型 11.总结 引言: 数据库是现代应用开发中不可或缺的组…

获取视频 RTMP 推流web播放

工作需要研究下市面上显示实时视频方案。这里介绍下RTMP协议。 需求获取USB摄像头,手机谁摄像头。显示到web网页上。 一、 采集摄像头 这个使用opencvSharp来采集: nuget: var task Task.Run(() >{var capture new VideoCapture(0);VideoCaptur…

PHP实战开发25-电商网站系统缓存设计方案系统讲述

文章目录 一、前言-缓存的作用1.1 提高性能1.2 减轻服务端压力1.3 减少网络流量1.4 改善用户体验1.5 支持离线访问1.6 降低数据传输成本 二、浏览器缓存2.1 强缓存2.2 协商缓存 三、CDN 缓存3.1 使用CDN缓存的好处3.1.1 加速网站加载时间3.1.2 节省服务器带宽3.1.3 提高可用性和…

快速计算多项式相乘系数 FFT快速傅里叶变换

快速计算多项式相乘系数 FFT快速傅里叶变换 快速傅里叶变换(FFT)——有史以来最巧妙的算法? 正常求两个多项式乘积 A ( x ) ∑ i 0 n A i x i , B ( x ) ∑ i 0 n B i x i C ( x ) ∑ i 0 n ∑ j 0 n A i B j x i j A(x)\sum_{i0}^{n}{A_ix^i},B(x)\sum_{…

Java多线程基础-11:工厂模式及代码案例之线程池

在Java中,xx池的概念是很常见的,比如之前遇到过的常量池、数据库连接池等等。 线程池是一种常用的多线程处理方式,它可以重复利用已创建的线程,从而减少线程的创建和销毁开销,并提高程序的性能。 通俗来说&#xff…

【Windows】Redis集群部署

集群是如何进行工作的 Redis采用哈希槽来处理数据与节点之间的映射关系,一个集群共有16384 个哈希槽,每个key通过 CRC16算法计算出一个16bit的值,再对16384取模,得到对应的哈希槽,集群通过维护哈希槽与节点的关系来得…

flutter聊天界面-Text富文本表情emoji、url、号码展示

flutter聊天界面-Text富文本表情emoji、url、号码展示 Text富文本表情emoji展示,主要通过实现Text.rich展示文本、emoji、自定义表情、URL等 一、Text及TextSpan Text用于显示简单样式文本 TextSpan它代表文本的一个“片段”,不同“片段”可按照不同的…

Verilog学习笔记2:反相器

代码&#xff1a; //反相器 timescale 1ns/10ps module inv( A,y); input A; output y; assign y~A; endmodule //testbench module inv_tb;reg A; wire YY;inv inv(.A(A),.y(YY));initial beginA<0;#10 A<1;#10 A<0; #10 A<1;#10 A<0; #10 A<1;#10 A<0;…

从小白到大神之路之学习运维第54天--------ELK日志收集分析

第三阶段基础 时 间&#xff1a;2023年7月6日 地 点&#xff1a;2304教室 授课人&#xff1a;李凤海 参加人&#xff1a;全班人员 内 容&#xff1a; ELK技术堆栈 目录 服务器设置&#xff1a; 部署elasticsearch集群&#xff1a; 配置elasticsearch集群&#xff…

怎样寻找SEO服务商,需要注意那些问题?

网上提供SEO服务的公司或个人多如牛毛&#xff0c;随便在搜索引擎上搜索一下&#xff0c;成千上万的公司就在眼前。大部分网站设计公司也兼职SEO服务&#xff0c;寻找合适的SEO服务商并不简单&#xff0c;鉴别合格的SEO服务商是关键。 1、确定外包任务 如果没有SEO团队&…

C++类相关概念

1. 函数形参默认值 &#xff08;1&#xff09; 建议函数&#xff08;不仅仅是构造函数&#xff09;形参默认值只在函数声明中指定&#xff1b; &#xff08;函数声明和定义写在同一个文件中&#xff0c;则函数声明、定义两者之一或两者都可指定形参默认值&#xff0c;两者都指定…

mybati执行流程源码分析

MyBatis执行流程源码分析 前言 由于之前写过关于mybatis源码的文章,但是感觉还是不够细致,不够完善.没有把一些具体的流程应用写下来,至此又写了一篇.内容可能比较长,希望大家可以打开源码跟着这篇文章一起看源码保证可以收获许多. 1.mybatis基础开发流程 1.引入mybatis相关…

短视频去水印小帮手微信小程序源码带后台

短视频去水印小帮手微信​小程序源码​带后台&#xff0c;短视频去水印系列教程服务端源码。 php版&#xff0c;这里不过多介绍&#xff0c;我假设您有基本的编码基础&#xff0c;并熟悉php语言及laravel框架。

Topaz Gigapixel AI v6 人工智能图像放大

其他软件或插件依赖于插值算法来放大图像&#xff0c;Topaz Gigapixel AI 则与众不同&#xff0c;它使用最先进的深度学习技术来扩大和增强图像。 它通过神经网络分析了数百万张照片&#xff0c;从而了解了不同的照片在放大时细节是如何损失的&#xff0c;以及如何为图像增强和…

四十三、贪心——Huffman树、排序不等式

算法主要内容 一、Huffman树1、题目内容——合并果子2、算法思路&#xff08;1&#xff09;“合并果子”中的Huffman树&#xff08;2&#xff09;算法步骤&#xff08;3&#xff09;状态转移 3、题解 二、排序不等式1、题目内容——排队打水2、算法思路&#xff08;1&#xff0…

【MySQL】数据库基础概念

文章目录 前言连接服务器什么是数据库&#xff1f;MySQL和MySQLdLinux中如何看到数据库文件SQL语句分类存储引擎 前言 今天继续讲解MySQL相关内容&#xff0c;本期主要讲解数据库的基础概念&#xff0c;方便后续学习数据库。 连接服务器 mysql -h [ip] -P [port] -u [root] …

IRIS在Linux下通过JDBC操作其他数据库

以前都是在Windows上用cache的SqlGateway通过odbc创建连接操作其他数据库。现在都用Linux了&#xff0c;那么和其他数据进行调用咋办呢。 可以看到是可以创建JDBC的连接的&#xff0c;而Java是跨平台的&#xff0c;所以可以用JDBC操作其他数据库&#xff0c;这次以mysql为例。…

浅谈Node.js中的npm和yarn

官方文档&#xff1a; npmhttps://www.npmjs.cn/ yarnhttps://yarn.bootcss.com/ npm和yarn的作用 yarn和npm都是构建和打包javascript代码的工具 区别 npm&#xff1a; 1npm使得js开发者易于分享其为解决特定问题而编写的代码&#xff0c;且可供其他开发者在他们自己的应…