`
dyx1024
  • 浏览: 114811 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

C核心技术手册(三十九)

 
阅读更多
18.3.1.5 所有输出

GCC有另外一个选项-save-temps,可以便利地一次性获得所有中间输文件。当你使用此选时,GCC正常地进行编译和连接,但将会在当前目录下保存预处理的输出、汇编语句、object文件。使用-save-temps选项生成的文件名与源文件名相同,对于预处理输出、汇编语句、object文件,后缀分别为.i.s.o

18.3.1.6 无一输出

如果使用-fsyntax-only选项,GCC将不会进行预处理、编译、装配、或连接,它仅仅测试输入文件的语法,具体可参见本章后面的“编译警告”一节。

18.3.2 多个输入文件

在第一章中,我们将circle.c分成两个文件,编译多个源文件将会产生多个object文件,每个文件中均包含机器码和对应源文件中各对象的符号,GCC为对象输出使用临时文件,除非你使用-c选项指示它仅编译,不进行连接:

$ gcc -c circle.c

$ gcc -c circulararea.c

这此命令将在当前工作目录下产生两个object文件,文件名分别为:circle.ocirculararea.o,你也可以将源文件名写在同一个GCC命令行中,获得同样的结果:

$ gcc -c circle.c circulararea.c

实际上,编译器在同一时间仅执行一个小任务,大程序往往包含许多源文件,在开发期间它们将被编译,测试、编辑、再编译多次,但整个代码的变动很小,为了节省时间,像make这样的控制构建的工具产生,它们使编译器仅对object文件比其对应的最新的源文件老的文件进行重新编译。

一次将当前源文件编译后产生的object文件进行连接可以使用下面命令:

$ gcc -o circle circle.o circulararea.o –lm

GCC假设以.o为后缀的文件为要进行连接的object文件。

18.3.2.1 文件类型

编译器认识一系列C程序的扩展文件,如下:

.c

C源码,在编译前进行预处理。

.i

预处理输出,为编译做准备。

.h

C头文件。

.s

汇编语言文件。

.S

带有C预处理指示符的汇编语言文件,在装配前进行预处理。

GCC也支持其他一些文件扩展:

.ii.cc.cp.cxx.cpp.CPP.c++.C.hh, .H, .m .mi, .f, .for, .FOR, .F, .Fpp, .FPP, .r, .ads.adb

这些文件类型涉及C++, Objective-C, Fortan, Ada, 带有其他扩展名的文件将被当做object文件来进行连接。

如果你为输入文件使用其他的命名,可以使用-x file_type选项来指定GCC处理它们,file_type必须为以下几种之一: c, c-header, cpp-out, assembler assembler-with-cpp, none。所有在命令行中跟在-x后面的文件列表将以指定的类型进行处理。更改类型时,可再次使用-x,例如:

$ gcc -o bigprg mainpart.c -x assembler trickypart.asm -x c otherpart.c

可以在命令行中多次使用-x来不同的文件类型,选项-x none将关闭类型指示。

18.3.3.2 混合输入类型

可以在GCC命令行中混合多种输入类型,编译器将忽略你请求不进行处理的文件,例如:

$ gcc -c circle.c circulararea.s /usr/lib/libm.a

在上面的命令行中,假设所有指定的文件均存在,GCC编译和装配circle.c 装配circulararea.s, 并忽略库文件,因为-c选项告诉它不做连接,输出结果为两个文件:circle.ocirculararea.o

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics