gcc编译多个文件

use*_*759 1 c gcc

我有这五个来源

main.c中
src_print1.c
src_print2.c
header_print1.h
header_print2.h

内容很简单,各个文件如下:

main.c中

#include "header_print1.h"
#include "header_print2.h"

int main(int argc, char** argv) {
    print1();
    print2();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

header_print1.h

#ifndef PRINT_1
#define PRINT_1

#include <stdio.h>
#include <stdlib.h>

void print1();

#endif
Run Code Online (Sandbox Code Playgroud)

header_print2.h

#ifndef PRINT_2
#define PRINT_2

#include <stdio.h>
#include <stdlib.h>

void print2();

#endif
Run Code Online (Sandbox Code Playgroud)

src_print1.c

#include "header_print1.h"

void print1() {
   printf("Hello 1\n");
}
Run Code Online (Sandbox Code Playgroud)

src_print2.c

#include "header_print2.h"

void print2() {
   printf("Hello 2\n");
}
Run Code Online (Sandbox Code Playgroud)

使用gcc我尝试使用以下命令行进行编译:

  gcc -I ./ -o test -c main.c src_print1.c src_print2.c
Run Code Online (Sandbox Code Playgroud)

一切都在同一个文件夹中.我得到的错误是:

gcc: cannot specify -o with -c or -S with multiple files
Run Code Online (Sandbox Code Playgroud)

我查看了gcc手册,但实际上我不明白在这种情况下该怎么做,因为通常我使用IDE而不是命令行.

Sou*_*osh 6

恕我直言,如果你重写你的编译语句,如

 gcc -I./ -o test main.c src_print1.c src_print2.c
Run Code Online (Sandbox Code Playgroud)

你会好起来的.没有必要为-c标志[注意]当你指定输出 二进制使用-o.

另外,如此处所述,所有文件都在同一目录中,您甚至可以将语句缩短为

 gcc -o test main.c src_print1.c src_print2.c
Run Code Online (Sandbox Code Playgroud)

建议:虽然上述变更可以完成这项工作,但这并不是一种优雅的方式.请考虑创建一个makefile,让您的生活更轻松.


[注意]:

关于-c选项,根据在线gcc手册,(强调我的)

-c
编译或汇编源文件,但不链接.链接阶段根本没有完成.最终输出是每个源文件的目标文件的形式.

所以,现在应该清楚,为什么你得到错误.