`

gcc 编译多个文件

 
阅读更多

一. 常用编译命令选项
假设源程序文件名为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等工具。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/niuniuchou/archive/2010/03/18/5394210.aspx

分享到:
评论

相关推荐

    linux下gcc编译器的简易入门

    介绍了gcc编译器中-o、-c、-Wall等常用选项(参数)的用法,并结合一个实例,详细介绍了gcc编译多个文件生成可执行文件的过程。

    Makefile文件arm-none-linux-gnueabi-gcc编译文件

    Makefile文件arm-none-linux-gnueabi-gcc编译文件,linux下多个.C文件统一使用make文件进行编译

    编译JNI的gcc指令代打和测试例程

    使用gcc和g++编译jni指令太长,很麻烦。所以做了一个编译工具JNIBuilder.jar。 因为是用于jni的,所以默认使用者的电脑上已经安装好Java和MinGW,并且可用。 并提供一个测试例程。...新手工具,不支持多个源文件。

    xlnt是开源的内存中读、写xlsx文件的C++库 本资料使用VC2022下编译读写excel库的教程

    xlnt 是一个 C ++ 库,用于处理电子表格excel,允许VC++从 XLSX 文件读取 / 写入。支持多平台编译,支持Windows、UNIX(如Linux)、Mac等操作系统。也可跨平台交叉编译,用于给Arm、PowerPC等嵌入式平台使用。 本文...

    gcc-7.5-安装套件.zip

    这是gcc7.5的安装文件.ubuntu18.04自带的gcc是5.4的,现在很多源文件需要用更高版本的gcc才能编译通过,gcc编译依赖多个其他库文件,这里包含其他库文件的安装文件. 安装步骤如下:...

    UbuntuLinux下建立GCC环境

    我们将会学到以下内容: 源程序编译 ...想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说 明. 2.Makefile的编写 假设我们有下面这样的一个程序,源代码如下:

    在Fedora17上安装arm-linux-gcc交叉编译环境

    虚拟机:VMWare Workstation 9.0 虚拟系统:Fedora17 交叉编译环境:arm-linux-gcc 4.4.3 查阅了很多相关资料,终于安装...这个文档是我总结的,算是对自己学习过程的一个记录,也希望我的这个经验对其他人会有所帮助。

    LINUX下的C++编译器GCC简介

    gcc 编译器能将C、C++语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分...

    windows 下gcc编译器 绿色精简命令行 版本

    本软件是dev-cpp里提取的核心文件共24个文件,压缩包只有1.3M解压后5M多,无需安装,便可直接使用,不喜欢直接删除,不留任何痕迹。 功能简介: 可以编译一般的C/C++代码,如科学计算,文件操作等,对于稍复杂的...

    ARM gcc linker文件编写实例

    该文档里面介绍了一个ARM系统GCC linker文件的编写的详细步骤,使用ARM交叉编译器且想自己详细分配代码MEMORY map 的请参考

    sqlite3编译通过的多文件eclipse工程

    sqlite3源码的编译一般都是很多个文件合成一个文件,现在把官方多文件的源码整理成可编译的eclipse工程,使用tdm-gcc编译器器

    6.VIM编辑器与GCC编译器

    VIM是一个类似于Vi的文本编辑器,不过在Vi的基础上增加了很多新的特性,Vim普遍被推崇为类Vi编辑器中最好的一个。文本编辑器是Linux操作系统中的重要工具。其中,VIM是使用最广泛的文本编辑器,VIM的全称是“Visual ...

    GCC使用手册(和常用命令解释)

    GCC编译器完成从C、C++、objective-C等源文件向运行在特定CPU硬件上的目标代码的转换(这是任何一个编译器需要完成的任务)。 GCC能够处理的源文件分为C、C++...连接,把多个目标代码模块连接生成一个大的目标模块;

    grpc-1.30.2 Linux 编译静动态库

    在 centos 7 下使用 gcc 4.8.5 + cmake 3.16.9 编译,包含 bin, include, lib, lib64, share 五个目录,可以直接在 linux C++ 程序中引用。 因为 grpc 编译比较麻烦,且依赖项较多,故而分享一下编译后的版本,本人...

    linux下gcc编译器的使用

    在使用GCC编译程序时,编译过程可以被细分为四个阶段: ◆ 预处理(Pre-Processing) ◆ 编译(Compiling) ◆ 汇编(Assembling) ◆ 链接(Linking) Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,...

    gcc,make指南,gdb调试GCC程序资料打包

    一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为...

    GCC资料大全.chm

    他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定: gcc 认为...

    gcc-pch-plugin:用于 GCC 的新版 PCH,作为插件编写

    可以一次使用多个PCH文件,性能应该会更好,而且不是基于写出一个堆映像。建造您将需要一个非常新的 GCC 版本——一个支持 GDB compile特性的版本。 该插件使用 GCC 中相同的钩子来完成它的工作。 一旦你有一个足够...

    GCC 中文手册.rar

    Gcc编译器能将C、C 语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为 a.out的文件. 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分...

    GNU GCC 手冊.zip

    他们都要用四个步骤中的一个或多个处理输入文件: 预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking).源文件后缀名标识源文件的 语言,但是对编译器来说,后缀名控制着缺省设定: gcc 认为...

Global site tag (gtag.js) - Google Analytics