Linux上的编译工具&&makefile

GUN命令

GUN: GUN’s Not Unix

gcc命令

	预处理:
			gcc		-E 	*.c
			g++		-E 	*.cpp
			可以使用重定向">"导出文件,可以查看预编译后的内容
	执行所有的预处理指令:
			头文件引入
			宏展开
			预处理指令执行
				#pragma
				#if
	编译:
			gcc		-c		*.c		只编译
					生成目标文件 (ELF文件 机器语言)
					windows上是 *.obj
			gcc		-S	*.c		生成汇编(.s文件)
	链接:
			gcc		*.o

使用vi编辑器我们写一个.c文件
在这里插入图片描述
此时我们的文件夹下只有一个Hello.c的文件
在这里插入图片描述
使用gcc Hello.c预处理、编译、链接一步到位,生成可执行文件 a.out
在这里插入图片描述
使用./a.out命令执行该文件,这里是没有加\n导致的没有换行:
在这里插入图片描述
另外,如果想要指定生成文件名,可以使用-o参数

gcc Hello.c -o Hello.exe

在这里插入图片描述

预处理

直接使用gcc -E Hello.c会是内容显示在终端上
在这里插入图片描述
此时我们可以使用上面提到的重定向>来让它保存到文件中gcc -E Hello.c > Hello.txt
或者使用-o选项就可以了
在这里插入图片描述

编译

直接编译gcc -c Hello.c生成目标文件Hello.o也称为ELF文件又称机器语言文件
在这里插入图片描述
我们这里可以使用多文档把编程使用它
在这里插入图片描述
然后使用gcc *.o -o demo.exe 链接他们
在这里插入图片描述

链接
使用库
使用现成的库:
windows上:
#include 添加头文件
#pragma comment(lib,"*.lib") 		加载库
linux:
#include 添加头文件           		/usr/include   
加载库   链接的时候   加 -l选项   	/lib /usr/lib
例如:gcc *.c -l m

在这里插入图片描述

自己制作静态库:
windows上:
vs 建动态库静态库工程

	静态链接库:
		链接的时候把源代码拿过来  在生成的可执行程序文件里边
	动态链接库: 
		运行的时候把源代码拿过来  不在生成的可执行程序文件里边

	1. 让可执行程序文件相对比较小
	2. 灵活!!!

	动态库缺点:
		依赖库文件
制作静态库:
1. 仅编译生成目标文件
	gcc -c *.c -o *.o
2. 通过目标文件生成 静态库文件
	ar rc lib*lib.a *.o
使用静态库:
1. 使用当前文件夹下的  像使用 目标文件*.o 一样使用
	gcc *.o lib*lib.a -o *.exe
2. 自己做的一般保存在/opt目录下
	gcc *.o -L /opt -l *lib
	-L 指定路径
	-l 指定目录名

先进行编译生成 .o文件再使用ar rc lib*lib.a *.o生成库,其中lib*lib.a是库的命名方式,开头结尾为lib,中间则为库名,后面的.o则是上一步生成的*.o文件
在这里插入图片描述

生成.a文件后我们删除之前的jia.c和jia.o文件,然后我们重新链接*.o以及.a文件就可以了
在这里插入图片描述

自己制作动态库
制作动态库:
gcc -shared *.c -o lib*lib.so
使用动态库:
1. 使用当前文件夹下的  像使用 目标文件*.o 一样使用
	gcc lib*lib.so
2. 自己做的一般保存在/opt目录下
	gcc *.o -L /opt -l *lib

在这里插入图片描述

makefile:自动化编译脚本

cmake qmake

#注释

总目标:总目标的依赖
	使用依赖生成目标的命令
分支目标:分支目标的依赖
	使用依赖生成目标的命令

makefile 写好后  使用make命令即可
	清理命令 :
make clean

变量 : 和shell脚本的变量一样 直接使用
取值同样用$

$@ 目标
$< 依次的依赖   
%  匹配多个名字

先把makefile文件编写好
在这里插入图片描述
然后使用make命令,如果没有则需要下载,ubuntu的下载命令为sudo apt install make,然后我们就得到了编译链接完成了的test.exe

在这里插入图片描述
也可以加上clean清理
在这里插入图片描述
使用的时候只用make clean即可

升级版,其中
$@ 目标
$< 依次的依赖
% 匹配多个名字
则原来的文件可以改写为:
在这里插入图片描述
执行效果不变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值