一. 常用编译命令选项
假设源程序文件名为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
分享到:
相关推荐
- **链接**(Linking):将多个目标代码文件和库文件合并成一个可执行文件,解决函数和变量的引用。 在这个例子中,通过观察这些文件,我们可以深入理解GCC如何将源代码一步步转化为计算机可执行的程序。这有助于优化...
C程序通常由一个或多个`.c`源代码文件组成。每个源文件可以包含多个函数,但只有一个`main()`函数是程序的入口点。编写好C程序后,保存为`.c`文件,例如`hello_world.c`。 接下来,我们要使用GCC进行编译。编译的...
链接阶段则将多个目标文件合并成一个可执行文件,同时处理符号引用和重定位。 FreeRTOS的集成意味着我们要将RTOS的核心服务、任务调度、中断处理等功能与应用程序代码结合。FreeRTOS提供了一系列API,允许开发者...
- 链接阶段:将一个或多个目标文件链接成最终的可执行文件。链接过程中会解析外部函数和变量引用,合并库文件中的代码等。 2. GCC的命令行选项: - `-o`:指定输出文件的名称。例如,使用`-oexample`可以生成名为...
- 链接器LD(Linker)负责将多个目标文件和所需的库文件链接在一起,生成最终的可执行文件。 - 链接过程包括解决未定义符号(即那些在目标文件中被引用但在同一文件内未定义的符号),并为它们分配内存地址。 - ...
2. **编译多个源文件**:如果项目包含多个源文件,每个文件可能包含不同的函数。首先,使用`-c`标志分别编译每个源文件生成目标文件,如`message.o`和`main.o`。然后,使用`gcc`的连接功能将这些目标文件合并成可...
4. 链接:将多个目标文件以及库文件链接成可执行程序。 在命令行编程环境中,常用的命令包括: - 编辑器如vi和emacs用于编写代码。 - gcc/g++用于编译代码,例如`gcc -o hello hello.c`生成名为hello的可执行文件。...
4. **链接**:将多个目标文件合并,并解决外部函数和全局变量的引用,生成最终的可执行文件。 **GDB编译调试:** GDB是GNU项目的一个强大的调试工具,可以与GCC配合使用。通过在编译时添加`-g`选项,GCC会在目标...
#### 二、为什么选择MinGW gcc编译Python 通常情况下,在Windows平台上编译Python时,大多数开发者会选择Microsoft Visual C++作为默认的编译工具。然而,对于那些希望使用其他编译器(如MinGW gcc)的人来说,这一...
介绍了gcc编译器中-o、-c、-Wall等常用选项(参数)的用法,并结合一个实例,详细介绍了gcc编译多个文件生成可执行文件的过程。
这三个库是GCC编译过程中用于增强其处理浮点数和大整数能力的关键组件。 1. GMP(GNU Multiple Precision Arithmetic Library): GMP是GNU项目的一部分,是一个高效且灵活的大整数运算库。它提供了一种在C和C++中...
在Windows环境下进行GCC编译是一项...总的来说,Windows下的GCC编译涉及多个层面,从环境搭建、语言混编到调试和优化,都需要一定的技巧和经验。了解并掌握这些知识点,对于提升Windows上的跨平台开发能力非常有帮助。
GCC编译手册详细介绍了如何使用GCC编译器进行程序编译,包括各种命令选项的使用方法以及与特定编程语言相关的语法、标准和支持的扩展。手册中也包含了有关GCC支持的编程语言标准的信息,例如C语言、C++语言以及...
"gcc编译及调试" gcc编译及调试是指使用GNU C编译器(GCC)对C语言程序进行编译和调试的过程。在Linux操作系统中,GCC是最常用的C编译器。 一、什么是C语言? C语言是一种在UNIX操作系统早期就被广泛使用的通用...
### gcc编译命令详解 #### 一、gcc简介与功能扩展 GCC(GNU Compiler Collection)最初作为GNU C Compiler出现,随着时间的推移逐渐发展成为一套支持多种编程语言的强大工具集。除了C语言外,GCC目前支持的语言还...
在这个"stm32_gd32 gcc编译代码工程"中,我们可以推测这是一个使用GNU Compiler Collection(GCC)工具链进行编译的项目,GCC是开源的编译器,支持多种架构,包括ARM,因此适用于STM32和GD32这样的MCU。GCC包含了C...
预处理是GCC编译过程中最初始的阶段。在这个阶段,GCC会处理以`#`字符开头的预处理器指令。预处理器的主要任务包括: - **宏替换**:对宏进行展开,例如`#define`定义的宏会被相应的文本替换。 - **文件包含**:...
3. **编译过程**:编译过程涉及到预处理、编译、汇编和链接等多个步骤。通过调整这些步骤中的参数,可以进一步提升最终二进制文件的执行效率。 #### 四、编译工具的选择 文档提到,对于编译工具本身的选择也很重要...
首先,你需要下载GCC编译工具链,例如基于ARM Cortex-M的GNU Arm Embedded Toolchain。这个工具链包含了GCC、GDB、Make等工具,用于编译和调试STM32代码。 1. **安装GCC编译器**: - 下载并安装GNU Arm Embedded ...