GCC命令详解与实践(二) -- 全局选项

为方便描述,以下以文件foo.c为例。在foo.c中,我们简单写一个两数求和的代码。然后存放到自己指定的文件夹下,最后在foo.c的文件夹下进入命令行环境。

前期准备

  1. 编写代码;
    foo.c代码如下:
#include <stdio.h>

int main(void)
{
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	
	printf("请输入数字1:");
	scanf("%d",&num1);
	
	printf("请输入数字2:");
	scanf("%d",&num2);
	
	sum = num1 + num2;
	printf("这两数之和为:%d",sum);
	
	return 0;	
}
  1. 存放到指定文件夹下,例如我自己存放的路径是"F:\C\Makefile\foo"
  2. 在文件夹"F:\C\Makefile\foo"下进入命令环境。

gcc -c

用法:gcc -c

作用: 预处理,编译和汇编,但不链接,最终生成的是目标文件,即.o文件。

例如:

gcc -c foo.c

gcc -S

用法:gcc -S

作用: 预处理和编译,但不汇编,最终生成的是汇编文件,即.s文件。

例如:

gcc -S foo.c

gcc -E

用法:gcc -E

作用: 仅预处理,不编译,不需要预处理的输入文件将被忽略。该命令不生成文件,它会在命令行窗
口中打印预处理后的源代码。你可以把预处理的源代码重定向输出到一个指定的文件下。

例如:

gcc -E foo.c
或者新建一个文本文件foo.txt。重定向到foo.txt中。
gcc -E foo.c > foo.txt

使用重定向的方法,我们可以打开foo.txt查看预处理后的源代码。

gcc -o

用法:gcc -o

作用: 输出文件到指定文件名中

例如:

gcc -o foo foo.c

如果-o后面指定文件名,默认情况下,gcc编译默认输出的可执行文件是a.out,对于foo.c文件来说目标文件是foo.o, 汇编文件是foo.s。

还可以多个命令一起使用,指定输出文件。例如:gcc -o hello.s -S foo.c 生成hello.s。可进入foo.c文件夹下查看hello.s

gcc -v

用法:gcc -v

作用: 打印gcc编译器驱动程序的版本号,以及预处理器和编译器的版本号。

例如:

gcc -v

gcc --help

用法:gcc --help

作用: 输出gcc编译选项的介绍/帮助信息。

例如:

gcc --help 

该命令还可以指定输出某一类的帮助信息,命令格式如下:

gcc --help={class|\[^]qualifier}\[,…]

这里的class指的是以下分类:

  1. optimizers
  2. warnings
  3. target
  4. params
  5. language(即C,C++,Object C...)
  6. common

这里的qualifier指的是以下限定符:

  1. undocumented
  2. joined
  3. separate

带参数--help命令的用法如下:
例如:显示编译器支持的所有未归档的特定于目标的编译选项:

gcc --help=target,undocumented

限定符前面加^符号,表示该限定条件的取反。

gcc -x

用法:gcc -x

作用: 指定文件的编译语言。

例如:

gcc -x c foo.c

默认情况下,编译器会根据文件名的后缀来进行编译,例如foo.c,当编译器检测到文件名后缀时,会自动将其按C语言文件进行编译。 -x 选项的作用是可以主动指定按哪种语言进行编译。不依赖文件名后缀。例如,这里有一个文件foo.txt,你可以使用命令:gcc -x -c foo.txt 对其进行编译。

gcc --version

用法:gcc --version

作用: 显示GCC的版本号和版权

例如:

gcc --version

以上就是GCC编译器常用的全局编译选项。