一. 常用编译命令选项
假设源程序文件名为test.c。

1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。

4. 选项 -S
用法:#gcc -S test.i 
作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]

1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

3. 如果要编译的文件都在同一个目录下,可以用通配符gcc *.c -o 来进行编译。

你是否会问,如果是一个项目的话,可能会有上百个文件,这样的编译法,人不是要累死在电脑前吗,或者等到你编译成功了,岂不是头发都白了,呵呵,所以我们要把上述的编译过程写进以下一个文本文件中:
Linux下称之为makefile

#这里可以写一些文件的说明
MyFirst: MyFirst.o hello.o
g++ MyFirst.o hello.o -o MyFirst
Hello.o:Hello.cpp
g++ -c Hello.cpp -o Hello.o
MyFirst.o:MyFirst.cpp
g++ -c MyFirst.cpp -o MyFirst.o

makefile 编写规则:
(1)以“#”开始的行为注释
(2)文件依赖关系为:
    target:components
    rule

存盘为MyFirst,在终端输入:make MyFist ,程序出现了错误可是所有程序员共同的敌人,在编写程序时我们应该尽量的去避免错误的出现,不过编写的时候再怎么都不可避免的出现这样那样的错误,对程序 进行必要的调试是一个好主意,那我们怎么来调试程序呢,看下面:

gdb ./文件名 在这里我修改下要想下面可以调试,在上面编译的 时候必须加上参数g,g++ -g hello.cpp -o hello

以下为调试状态下的可以用到的命令(可以仅输入单词的输入,如break可简为b),尖括号中为说明

list <显示源代码>
break 行号 <设置断点>
run <运行程序>
continue <继续从断点处执行>
print 变量 <调试时查看变量的值>
del 行号 <删除断点>
step <单步执行,可跟踪到函数内部>
next <单步执行,不可跟踪到函数内部>
quit <退出>

makefile 的编写不是件容易的事情,因为自己写的makefile可能不能在所有的unix/linux类操作系统下通用。因此在很多项目中都用automake.autoconf或者是Cmake等工具。

gcc 编译多个源文件-转相关推荐

  1. linux 编译多个文件,linux gcc编译多个源文件的方法

    华为荣耀6 H60-L02/L12(联通版)救砖包[适用于无限重启] 本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12(联通版)救砖包[适用于无限 ...

  2. 【Linux入门到精通系列讲解】Ubuntu下使用gcc编译并运行C程序

    文章目录 1 hello 2 命令 3 linux下gcc编译多个源文件 1 hello 2 命令 在终端输入 Ubuntu命令 $ gcc hello.c -o hello $ ./hello == ...

  3. c语言编译生成obj,GCC编译Objective-C源文件

    本章主要讲的是使用 GCC 编译 Objective-C. Objective-C 可以把它看成是 C 语言的扩充,同时它又支持类的使用,所以也是面向对象的编程语言,通常写作是 ObjC 或者是 OC ...

  4. linux下gcc编译使用opencv的源文件时报错的处理:undefined reference to symbol '_ZNSsD1Ev@@GLIBCXX_3.4'

    这阵子用OpenCV的sift做了一下匹配,在使用gcc编译时遇到这样的一个报错 /usr/bin/ld: /tmp/cceCEx1F.o: undefined reference to symbol ...

  5. GCC编译过程以及对应FILE文件表

    gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理:生成.i的文件[预处理器cpp] (2).编译:将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] (3).汇编:有汇编变 ...

  6. Linux本地yum源配置以及使用yum源安装gcc编译环境

    本文档是图文安装本地yum源的教程,以安装gcc编译环境为例. 适用范围:所有的cetos,红帽,fedroa版本 适用人群:有一点linux基础的小白 范例系统版本:CentOS Linux rel ...

  7. vscode添加源文件_VSCode自制的IDE编译多个源文件

    文/Edward VSCode的预定义变量 我们上一篇文章中讲述了如何将MinGW工具嵌入到VSCode文本编辑器中,在这个配置的过程中,我们只需要通过修改VSCode生成的"luanch. ...

  8. linux gcc编译C程序 分享

    一个c语言程序从源文件到生成可执行文件,编译器需要共经历4个步骤: 1) 预处理:把c文件中预处理命令扫描处理完毕,即对源代码文件中的文件包含(#include).预编译语句(如宏定义#define等 ...

  9. gcc编译以及Makefile与GDB调试

    一:编译选项:       gcc常用编译的选项: -c 表示编译源文件,只编译并生成目标文件. -E 只运行 C 预编译器. -o 表示输出目标文件 -g 表示在目标文件中产生调试信息, 用于 gd ...

最新文章

  1. 抖音出现大量“三岁用户”,马化腾李彦宏都被还童
  2. hdu 1023 Train Problem II
  3. 前端学习(2950):webpack目录结构
  4. 【HDU - 6185】Covering(矩阵快速幂优化二维dp,高斯消元,轮廓线dp打表)
  5. redis rua解决库存问题_如何解决高并发下的库存安全问题,没你想得那么复杂(附源码)...
  6. ​什么问题最让程序员头秃?我们分析了11种语言的11000个问题
  7. 3.2 Lucene实战:一个简单的小程序
  8. 【以太坊源码阅读】椭圆曲线加密和EIP155
  9. 平面直角坐标系中的旋转公式_初一下学期,平面直角坐标系中求图形面积,转化与化归思想的体现...
  10. Android第三十八天
  11. 翻译: 如何使用Xcode构建xcframework
  12. cocosbuilder源码编译
  13. 串口转以太网产品选型指南
  14. 当数据库新增字段后,接下来需要做的操作(备忘录)
  15. python读取grd数据_一个关于grads显示grd格式数据的问题。
  16. Win11如何更改屏幕刷新率?Win11更改屏幕刷新率的方法
  17. Codeforces Round #828B CF1744B Even-Odd Increments
  18. C语言字母升序排列,C语言改错题,题目:实现n个字符串的升序排列
  19. 乱码html文档怎么恢复,乱码word文档怎么恢复
  20. 判断设备是否是 iphone5

热门文章

  1. linux gdb 寄存器,x86 调试寄存器
  2. python数据可视化是什么_python3数据可视化是什么?
  3. 人家android博客地址
  4. Android apk反编译工具介绍
  5. Java中SimpleDateFormat用法详解
  6. 剑指Offer之旋转数组中的最小数字(题8)
  7. 从底层看云:云计算准备好了么?
  8. WPF 用Main函数方式启动程序
  9. C语言中写一个函数返回参数二进制中 1 的个数
  10. 物流系统车辆仓库定位的实现——基于RFID定位的实现方法