Linux C文件编译

设置编辑器

1.TAB键设置为4空格。

首先用vim打开/etc/vim/vimrc文件,这里面发现root用户才能修改vimrc文件,所以用sudo命令暂时切换到root用户。

在这里插入图片描述

在vimrc文件最后面,输入set ts =4完成设置。

在这里插入图片描述

然后保存,关闭文件。

2.VIM编辑器显示行号。

在上面的文件最后一行加入set nu即可。

编写代码

在这里插入图片描述

在这里插入图片描述

编译代码

Ubuntu下,C语言编译器是GCC。

使用gcc -v查看GCC编译器版本号。

可知,本机GCC编译器版本为5.4.0。

Ubuntu自带的GCC编译器针对X86架构,只能编译在X86架构CPU上运行的程序。

编译在ARM上运行的程序,需要ARM的GCC编译器。

在这里插入图片描述

gcc main.c,编译main.c文件。编译完成以后,生成一个a.out文件,这就是编译生成的可执行文件。使用./a.out,运行可执行文件。

在这里插入图片描述

a.out文件的命名,是GCC编译器自动命名的。使用gcc命令时,加上-o,可以指定生成的可执行文件名字。

在这里插入图片描述

GCC编译器

gcc命令格式:

gcc [选项] [文件名字]

选项:

-c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。

-o:<输出文件名>指定编译结束以后的输出文件名,如果不使用这个选项,GCC默认编译出来的可执行文件名字为 a.out。

-g:添加调试信息,如果要使用调试工具(如GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。

-O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。

-O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

GCC编译器,能够检测出错误类型,标记错误发生在哪个文件、哪一行。

GCC编译器编译流程:预处理、编译、汇编、链接。

预处理:展开所有头文件,替换程序中的宏、解析条件编译,并添加到文件中。

编译:将经过预处理的代码编译成汇编代码。

汇编:将汇编语言文件编译成二进制目标文件。

链接:将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件。

多个文件的编译

例子:键盘输入两个整形数字,计算他们的和,将结果显示在屏幕上。

//main.c
#include <stdio.h>
#include "input.h"
#include "calcu.h"int main(int argc, char *argv[])
{int a, b, num;input_int(&a, &b);num = calcu(a, b);printf("%d + %d = %d\r\n", a, b, num);
}//input.c
#include <stdio.h>
#include "input.h"void input_int(int *a, int *b)
{
printf("input two num:");
scanf("%d %d", a, b);
printf("\r\n");
}//calcu.c
#include "calcu.h"
int calcu(int a, int b)
{return (a + b);
}//input.h
#ifndef _INPUT_H
#define _INPUT_Hvoid input_int(int *a, int *b);
#endif//calcu.h
#ifndef _CALCU_H
#define _CALCU_Hint calcu(int a, int b);
#endif

可以使用下面这个语句对三个文件编译,生成名为main的可执行文件。

gcc main.c calcu.c input.c -o main

编译完之后,执行main,流程如下。

在这里插入图片描述

但是以上方法存在问题:1.如果文件数量多,不方便。2.使用上面命令,编译时所有文件会重新编译,耗时多。3.没有修改的文件不需要再次重新编译。

一个解决方法如下:

gcc -c main.c
gcc -c input.c
gcc -c calcu.c
gcc main.o input.o calcu.o -o main

-c选项,只编译不链接。

最后的命令是将所有.o文件链接成可执行文件main。

如果修改input.c文件,只需要将input.c重新编译成.o文件,执行下面两条命令:

gcc -c input.c
gcc main.o input.o calcu.o -o main

但是,存在问题:修改文件多,不知道哪个文件修改过。

Makefile

以上,是通过在终端执行gcc 命令完成C文件的编译。文件很多,上面的方法就不好使了。

Makefile文件,描述哪些文件需要编译或重新编译。

Makefile里面,可以执行系统命令。

使用make命令,可完成整个工程的自动编译。

仍然对于上面的例子:键盘输入两个整形数字,计算他们的和,将结果显示在屏幕上。

创建Makefile文件,输入如下内容:

在这里插入图片描述

使用Makefile编译文件的过程如下。

修改了input.c文件之后,再执行make命令,发现只是重新编译了input.c文件。

在这里插入图片描述

如果工程没有编译过,工程中所有.c 文件都被编译并且链接成可执行程序。

工程中只有个别C文件被修改,只编译这些被修改的C文件,并且链接成可执行文件。

工程的头文件被修改了,只需要编译所有引用这个头文件的C文件,并且链接成可执行文件。

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

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

相关文章

catia 草图设计

草图设计界面 进入草图编辑器环境&#xff1a; 菜单栏&#xff0c;文件-新建&#xff0c;然后类型选择Part。 工具栏&#xff0c;点击下面草图按钮。 然后选择草图平面。 然后就进入草图界面。 草图界面主要由菜单栏、工具栏、特征树、信息栏、罗盘、图形区组成。 菜单栏&…

CATIA连接盘实体设计

文件-新建-part。 点击草图按钮&#xff0c;选择xy平面&#xff0c;绘制如下草图。 然后用橡皮擦修改一下。 然后&#xff0c;点击凸台按钮。选择刚刚定义的草图&#xff0c;拉伸20mm。 选择拉伸实体上端面&#xff0c;点击草图按钮&#xff0c;进入草图编辑器。 在草图编辑器…

PostgreSQL 表的创建、删除、更新

psql工具 psql工具&#xff0c;可通过命令行执行SQL语句。 D:\program files\PostgreSQL\14\bin>psql -U postgres 用户 postgres 的口令&#xff1a; psql (14.2) 输入 "help" 来获取帮助信息.postgres#创建数据库 创建表之前&#xff0c;先创建存储表的数据库…

PostgreSQL 简单的查询

查询列 SELECT语句&#xff0c;用于从表中选取数据。 格式&#xff1a; SELECT <列名>,... FROM <表名>;从Product表中&#xff0c;查询三列。 SELECT product_id, product_name, purchase_price FROM Product;查询所有列&#xff0c;格式&#xff1a; SELECT …

PostgreSQL 聚合、分组、排序

聚合函数 用于汇总的函数。 COUNT COUNT&#xff0c;计算表中的行数(记录数)。 计算全部数据的行数&#xff1a; SELECT COUNT(*)FROM Product;NULL之外的数据行数&#xff1a; SELECT COUNT(purchase_price)FROM Product;结果如下图。 对于一个含NULL的表&#xff1a; …

PostgreSQL 插入、删除、更新、事务

INSERT 使用INSERT语句可以向表中插入数据。 创建一个表&#xff1a; CREATE TABLE ProductIns (product_id CHAR(4) NOT NULL,product_name VARCHAR(100) NOT NULL,product_type VARCHAR(32) NOT NULL,sale_price INTEGER DEFAULT 0,purchase_p…

PostgreSQL 视图、子查询

视图 表里面保存的是实际数据&#xff0c;视图里面保存的是SELECT语句(视图本身不存储数据)。 从视图中读取数据&#xff0c;此时视图在内部执行SELECT语句&#xff0c;创建一张临时表。 使用视图的好处&#xff1a;其一&#xff0c;视图不保存数据&#xff0c;节省存储设备…

GD32F307 DAC 输出波形

文章目录DACDAC_CTL 控制寄存器定时器TIMERx_CTL1 控制寄存器改变波形频率DMADMA和外设配合DMA_CHxCNT计数寄存器波形曲线总结源码DAC 如下面框图所示&#xff0c;使能外部触发后&#xff08;通过设置 DAC_CTL 寄存器的 DTENx 位&#xff09;&#xff0c; 当已经选择的触发事件…

GD32 ADC采集电压

文章目录ADCTIMDMA其他一些初始化main总结使用芯片为GD32F307 ADC 连续转换模式&#xff0c;可以运行在规则组通道上&#xff0c;一旦相应软件触发或者外部触发产生&#xff0c;ADC就会采样和转换规定的通道。 采样时间&#xff0c;每个通道可以用不同的时间采样。ADC使用若…

DAC、ADC、FFT使用总结

目录计算公式波形生成DAC波形频率ADC采样时间离散傅里叶变换DFTFFT计算公式 DAC、ADC、FFT之间有些参数环环相扣&#xff0c;所以先整合一下公式。 1.系统时钟周期72MHZ。 2.定时器的单个时钟周期。 3.定时器的触发周期。 4.正弦波一个周期的时间&#xff0c;其中N为正弦波一…

c++代码根据点位连线_邹军:数控车倒角C与自动倒圆角R编程方法

提示&#xff1a;点击上方↑↑"数控达人"即可每天免费订阅【邹军&#xff0c;十多年数控工作经验&#xff0c;现自创一套有理论&#xff0c;有干货&#xff0c;还有方法论做支撑的实战编程教程(PDF)&#xff0c;从而让你编写程序就像做填空题一样简单。在没有人指引你…

不愿意和别人打交道_始终和人保持距离,最不合群的3星座,孤僻却有真本事,能成大事...

始终和人保持距离&#xff0c;最不合群的3星座&#xff0c;孤僻却有真本事&#xff0c;能成大事巨蟹座巨蟹座的人真的是天生孤僻&#xff0c;他们始终和人保持距离&#xff0c;也不喜欢跟别人打交道&#xff0c;最怕就是应酬的事&#xff0c;看起来很不合群&#xff0c;但是巨蟹…

stc15w4k32s4芯片引脚图片_单片机引脚功能初识及提高(3)

40个接口我们已经了解了29个了&#xff0c;在开始我们 今天的内容之前&#xff0c;我们先对之前的内容总结一下。图片来源网络最小系统电源部分(20脚GND,40脚VCC[5v])复位部分(9脚&#xff0c;给高电平进行复位)下载部分(ISP下载接6&#xff0c;7&#xff0c;8脚&#xff0c;ch…

tsd3dmapper软件使用方法_TOYO模组选型软件使用方法

直线模组选型对于机械工程师和采购人员来说&#xff0c;是最基础的硬性要求。直线滑台模组选型中性能是其中之一&#xff0c;还要根据需求考虑&#xff1a;相对应的&#xff0c;在选购直线滑台模组时&#xff0c;先根据下面几点需求来断定直线滑台模组的详细参数需求。可以参考…

pdf从结构新建书签_强力推荐一款PDF神器

某阅读器作为一款在全球范围内流行的PDF阅读器&#xff0c;能够快速打开、浏览、审阅、注释、签署及打印任何PDF文件&#xff0c;具有轻快、高效、安全等特性&#xff0c;是目前一款带有PDF创建功能的阅读器。此外&#xff0c;它以安全著称&#xff0c;从底层技术、应用设计、功…

二元相图软件_Materials Studio 领先的材料模拟软件

BIOVIA MATERIALS STUDIO拥有完善的建模和模拟工具&#xff0c;能够帮助材料科学与化学领域的研究者对材料中原子、分子结构与性质、性能间的关系进行预测。利用Materials Studio&#xff0c;各工业领域的研究者能够对诸多类型的材料&#xff0c;如制药、催化剂、高分子及复合材…

java8 stream 做累加_《Java 8 in Action》Chapter 1:为什么要关心Java 8

自1998年 JDK 1.0(Java 1.0) 发布以来&#xff0c;Java 已经受到了学生、项目经理和程序员等一大批活跃用户的欢迎。这一语言极富活力&#xff0c;不断被用在大大小小的项目里。从 Java 1.1(1997年) 一直到 Java 7(2011年)&#xff0c;Java 通过增加新功能&#xff0c;不断得到…

fabric go sdk 依赖的安装_从这些角度看 Go 是一门很棒的语言

Go 当前引起了很多关注。让我们看一下 Go 好的部分。我最近用 Go 写了一个 SSH 服务器[1]&#xff0c;在其中启动容器。该项目已经发展到很大规模&#xff0c;并且我向 Go 发起了 PR[2]&#xff0c;以修复我发现的错误。在积累了比 “Hello world&#xff01;” 更多的经验之后…

程序win10_win10该文件没有与之关联的程序来执行操作

当初我遇到这个问题的时候&#xff0c;也是一脸懵&#xff01;在度娘那里尝试了许多种方法&#xff0c;都没有得到解决&#xff01;那些方法我就不一一介绍了&#xff0c;百度一大堆&#xff01;下面就来分享一下我解决的办法&#xff01;1.打开默认程序2.找到设置程序访问和计…

node工程默认url_node 爬虫入门实例,简单易懂

前言本文介绍一个 koa 的爬虫项目&#xff0c;受众对象为初学前端不久的小伙伴&#xff0c;通过这个项目能对 node 爬虫有一个简单的认识&#xff0c;也能自己动手写一些简单的爬虫。项目地址&#xff1a;Fe-Icy/firm-spider​github.com启动 koa 服务Koa (koajs) -- 基于 Node…