-o 表示产生目标文件。
-c 表示只编译代码但不进行链接,加改参数生成的目标文件是不能执行的(我们常用的链接库就是这样得来的)。
通常在只有一个源文件的情况下不需要加-c。但实际上大多数情况下C程序远不止1个源文件,当main函数需要调用不在同一源文件下的函数时就需要链接到包含该函数的目标文件。
举个例子:
/*main.c*/
#include<stdio.h>
int main(){
test();
}
/*test.c*/
#include<stdio.h>
extern void test(){
}
gcc -c test.c -o test
gcc test main.c -o main
-c只编译不链接,生成object文件
如果不加-c只使用-o选项,gcc会调用ld来链接生成可执行的二进制文件
与-c类似的选项有-E只预处理,-s生成汇编文件
if main function is in the same .c file:
gcc -c test.c -o test
gcc test -o test
gcc -c traverse.c
生成.o文件
gcc -o traverse traverse.o(注意.o在后面)
生成可执行文件