Linux下的gcc与g++

文章目录

一.Linux gcc与g++

1.gcc如何生成可执行程序(g++同)

  1. 预处理(宏定义替换,展开头文件代码,条件编译,去注释,生成 .i 文件 )
  2. 编译(检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
    无误后,gcc 把代码翻译成汇编代码,生成 .s 文件 )
  3. 汇编(把汇编代码转成机器码*{二进制 }*,把编译阶段生成的 .s 文件转成目标文件 .o )
  4. 链接(链接动静态库,生成可执行文件)

  • -E 只激活预处理,不会主动生成文件,需要手动把它重定向到一个输出文件(.i)里面
  • -S 编译成汇编代码,且不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0
  • -O1
  • -O2
  • -O3 编译器的优化选项的4个级别,-O0表示没有优化, -O1为缺省值,-O3优化级别最高
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息

2.函数库

Linux静态库: .a 动态库:.so
Windows静态库:.lib 动态库:.dll

  • 动态库(网吧)优缺点:1.不能丢失 2.节省资源
  • 静态库(家里的电脑)优缺点:1.一旦形成与库无关 2.浪费资源

查看文件是什么链接方式:file + 文件

二.Linux项目自动化构建工具-make/makefile

复制代码
.PHONY:mytest//可以重复执行,不管文件是否改变
mytest:test.c//依赖关系                                                                         
    gcc -o mytest test.c//(gcc编译链接.c文件)依赖方式
.PHONY:clean//可以重复执行,不管文件是否改变
clean://依赖关系可以为空
	rm -f mytest(清理编译链接产生的多余文件)
  • makefile对最新的可执行程序,默认不重新生成

  • makefile文件中的顺序是从上往下的,默认形成第一个目标文件




  1. makefile带来的好处就是------"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
  2. make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令
    译,极大的提高了软件开发的效率
  3. make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令
  4. make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
相关推荐
_OP_CHEN23 分钟前
【Linux系统编程】(三十九)吃透线程概念:从底层原理到实战应用
linux·运维·操作系统·线程·进程·多线程·c/c++
_OP_CHEN26 分钟前
【MySQL数据库基础】(一)保姆级 MySQL 环境配置教程!CentOS 7+Ubuntu 双系统全覆盖
linux·数据库·sql·mysql·ubuntu·centos·环境配置
Codefengfeng29 分钟前
linux系统安装软件教程
linux·运维·服务器
杜子不疼.4 小时前
UU云电脑深度测评:高性价比游戏云电脑,办公版本即将推出
服务器·游戏·电脑
袁袁袁袁满7 小时前
Linux云服务器如何判断系统是否发生过异常断电?
linux·运维·服务器
一只鹿鹿鹿7 小时前
智慧水利一体化建设方案
大数据·运维·开发语言·数据库·物联网
学不完的7 小时前
haproxy
linux·运维·https·负载均衡·haproxy
LCG元7 小时前
STM32MP1边缘网关:Linux系统下Modbus转MQTT协议转换实战
linux·stm32·嵌入式硬件
cyber_两只龙宝8 小时前
Nginx--企业高性能web服务器高级配置详解
linux·运维·nginx·云原生
如若12310 小时前
AutoDL云服务器 NVIDIA 570驱动 EGL渲染修复全记录
运维·服务器·python