您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

总结配置Linux C 的终端环境

时间:2021-07-14 11:50:37  来源:  作者:大话幽默一刻
  • 配置终端的C开发环境

在Ubuntu 终端系统中开发,需要依赖一些命令行工具,对比使用windows 下的IDE集成开发环境会有一些不同之处。

linux 下一般使用gcc 编译C 语言代码,gcc 可以通过管理工具进行安装,以Ubuntu 16.04为例

sudo apt-get install gcc

新建一个C 语言程序进行编译演练,可以使用vim, 或者是touch命令来创建一个文件。

vim test.c / touch test.c
#include <stdio.h>
int main( )
{
		printf("study gccn");
  	return 0;
}

代码编辑完成后,使用gcc 命令进行编译

$ ls
test.c
$ gcc -o test test.c

-o 参数指定可执行程序名,test.c 是源码文件,当编译完成后,当前目录下会出现一个可执行文件test

$ ls
test 			test.c

在命令行下,将可执行程序运行起来,看是否会输出预期的内容:

$ ./test
study gcc
  • 多文件编译

一般程序都是由多个文件组成,编译多个文件程序,需要将所有源码文件传给编译器。

C语言为例,将test.c 拆解成两个文件,创建test2.c

touch test2.c

#include <strdio.h>
 
void print_test( )
{
		printf("study gccn");  
}

test2.c 中定义一个函数,函数名为print_test, 用于输出 "study gcc".

在test.c中直接调用print_test 即可:

test.c

void print_test( );
int main( )
{
 		print_test();
  	return 0;
}

按照以下步骤,编译由两个文件组成的程序:

gcc -o test test.c test2.c
  • 解析编译流程

程序编译可以进一步分成为编译(Compile) 和链接(Link) 这两个阶段

我们可以分阶段编译test.c, test2.c,源文件如下:

$ ls
test.c		test2.c

编译test2.c文件, 生成test2.o 对象文件:

$ gcc -c test2.c
$ ls
test2.c   test2.o   test.c

编译test.c文件,生成test.o 对象文件:

$ gcc -c test.c
$ ls
test2.c  test2.o  test.c  test.o

最后链接两个对象文件,生成可执行程序:

$ gcc -o test test.o test2.o
$ ./test
stduy gcc
  • 关于分阶段编译

分阶段编译的最大好处是, 可以进行部分编译 ==> 只是编译有变更的部分

在上面的例子中,test.c 有变更,而test2.c 没有变更,那么,我们只需要编译test.c 生成新的test.o 对象文件,最后再跟test2.o 文件链接生成新的可执行文件test。

可以省去编译test2.c 这段时间,如果文件较多,节省的编译时间就会很长。

  • 使用Makefile 自动编译

touch Makefile

.DEFAULT_GOAL := run

test2.o: test2.c
  gcc -o test2.o -c test2.c

test.o: test.c
  gcc -o test.o -c test.c

test: test2.o test.o
  gcc -o test test2.o test.o

run: test
  ./test

clean:
  rm -f *.o
  rm -f test
  

$ ls
Makefile  test2.c  test.c
$ make
gcc -o test2.o -c test2.c
gcc -o test.o -c test.c
gcc -o test test2.o test.o
./test
stduy gcc

执行make 命令

$ ls
Makefile  test2.c  test.c
$ make
gcc -o test2.o -c test2.c
gcc -o test.o -c test.c
gcc -o test test2.o test.o
./test
stduy gcc

Makefile 大致可以理解成 目标 、 依赖 以及 构建指令 。

缺省情况下,Makefile定义的第一个目标为默认目标,在第一行显式定义了默认目标,由于没有变更,再次构建时自动省略编译环节。

$ make
./test
study gcc

定义用于清理编译结果的目标 ==》 clean:

$ ls
Makefile  test  test2.c  test2.o  test.c  test.o
$ make clean
rm -f *.o
rm -f test
$ ls
Makefile  test2.c  test.c

清理编译结果,在进行全新编译时很方便。



Tags:Linux C   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
配置终端的C开发环境在Ubuntu 终端系统中开发,需要依赖一些命令行工具,对比使用Windows 下的IDE集成开发环境会有一些不同之处。在Linux 下一般使用gcc 编译C 语言代码,gcc 可...【详细内容】
2021-07-14  Tags: Linux C  点击:(94)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条