[root@it-kiso 演示]# ls
demo1.c demo1.o demo2.c demo2.o
[root@it-kiso demo]# cat demo1.c
#包括
int main(){
printf(“GCC:https://it-kiso.com/gcc/”);
返回0;
}
[root@it-kiso demo]# cat demo2.c
#包括
int main(){
printf(“Python:https://it-kiso.com/python/”);
返回0;
}
[root@it-kiso demo]# gcc -c demo1.c -o demo1.o
[root@it-kiso demo]# gcc -c demo2.c -o demo2.o
[root@it-kiso 演示]# ls
demo1.c demo1.o demo2.c demo2.o
如上所示,如果创建两个C语言源程序文件demo1.c和demo2.c,并根据它们运行gcc -c命令,GCC编译器将依次编译demo1.c和demo2。 .c 被编译并生成它们各自的目标文件。
事实上,一条 gcc (g++) 指令通常可以同时处理多个文件。以编译demo1.c和demo2.c为例,可以运行以下命令:
[root@bogon demo]# gcc -c demo1.c demo2.c
[root@bogon 演示]# ls
demo1.c demo1.o demo2.c demo2.o
可以看到demo1.c和demo2.c的编译过程可以共享gcc -c指令。默认情况下,这将分别生成 demo1.o 和 demo2.o 目标文件。
注意,该方法不能使用-o选项将分别编译demo1.c和demo2.c的目标代码输出到指定文件。也就是说,下面这行代码是错误的。
[root@bogon demo]# gcc -c demo1.c demo2.c -o demo1.o demo2.o
gcc: demo2.o: 没有这样的文件或目录
gcc: -o 不能在多个文件中与 -c 或 -S 一起指定
显然,gcc 指令并不像我们想象的那么智能。
不仅如此,您还可以与以下人员共享 gcc 指令:
- 将多个 C (C++) 源文件处理为程序集或目标文件。
- 将多个 C (C++) 源文件或预处理文件处理为程序集或目标文件。
- 将多个 C (C++) 源文件、预处理文件或汇编文件处理为目标文件。
- 在同一个项目中,各种源文件、预处理文件、汇编文件和目标文件可以使用单个 gcc 指令最终生成可执行文件。
还可以使用 gcc -E 指令对多个 C(C++) 源文件完成预处理操作,但默认情况下该指令仅将预处理结果打印到屏幕上,因此预处理操作完成后可以生成预处理后的结果。每个文件。
以 demo1.c 和 demo2.c 源程序文件为例。
[root@bogon demo]# gcc -E demo1.c -o demo1.i
[root@bogon 演示]# ls
demo1.c demo1.i demo2.c
[root@bogon demo]# gcc -c demo1.i demo2.c
[root@bogon 演示]# ls
demo1.c demo1.i demo1.o demo2.c demo2.o
首先可以看到demo1.c源文件被单独预处理,生成了demo1.i文件。在此基础上,仅使用一个 gcc -c 命令将 demo1.i 和 demo2.c 分别编译为 demo1.o 和 demo2.o 目标文件。
GCC 编译多文件项目
C(或C++)项目通常包含多个源文件,但是如果您使用单独编译源文件然后链接它们的传统方法来编译它们,则需要编写一个编译文件。这样可以让你事半功倍。事实上,利用gcc指令的强大功能同时处理多个文件可以大大提高你的工作效率。
例如,这是一个具有两个源文件的 C 语言项目。
[root@bogon 演示]# ls
main.c myfun.c
[root@bogon demo]# cat main.c
#include <stdio.h>
int main() {
屏幕();
返回 0。
}
[root@bogon demo]# cat myfun.c
#include <stdio.h>
无效显示(){
printf(“GCC:https://it-kiso.com/gcc/”);
}
[root@bogon 演示]#
可以看到该项目只包含两个源文件。其中myfun.c文件用于存放一些功能函数,可以在main.c文件中直接调用。
该项目可以编译如下:
[root@bogon 演示]# ls
main.c myfun.c
[root@bogon demo]# gcc -c myfun.c main.c
[root@bogon 演示]# ls
main.c main.o myfun.c myfun.o
[root@bogon demo]# gcc myfun.o main.o -o main.exe
[root@bogon 演示]# ls
main.c main.exe main.o myfun.c myfun.o
[root@bogon 演示]# ./main.exe
海湾合作委员会:https://it-kiso.com/gcc/
另外,gcc指令可以直接编译和链接它们。
[root@bogon demo]# gcc myfun.c main.c -o main.exe
[root@bogon 演示]# ls
main.c main.exe myfun.c
[root@bogon 演示]# ./main.exe
海湾合作委员会:https://it-kiso.com/gcc/
以上两种方式可以满足大部分场景的需求。然而,如果一个项目有超过 10 个源文件,即使您共享一个 gcc 命令来编译(和链接)它们,编写每个文件的名称也可能很乏味。
要解决此问题,请进入项目目录并使用 *.c 表示所有源文件。即执行以下命令:
[root@bogon 演示]# ls
main.c myfun.c
[root@bogon demo]# gcc *.c -o main.exe
[root@bogon 演示]# ls
main.c main.exe myfun.c
[root@bogon 演示]# ./main.exe
海湾合作委员会:https://it-kiso.com/gcc/
这可以节省您手动输入每个源文件名称的大量时间。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

