我有这五个来源
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;
}
header_print1.h
#ifndef PRINT_1
#define PRINT_1
#include <stdio.h>
#include <stdlib.h>
void print1();
#endif
header_print2.h
#ifndef PRINT_2
#define PRINT_2
#include <stdio.h>
#include <stdlib.h>
void print2();
#endif
src_print1.c
#include "header_print1.h"
void print1() {
printf("Hello 1\n");
}
src_print2.c
#include "header_print2.h"
void print2() {
printf("Hello 2\n");
}
使用gcc
我尝试使用以下命令行进行编译:
gcc -I ./ -o test -c main.c src_print1.c src_print2.c
所有内容都在同一个文件夹中。 我得到的错误是:
gcc: cannot specify -o with -c or -S with multiple files
我查看了gcc手册,但实际上我不明白在这种情况下该怎么做,因为通常我使用IDE而不是命令行。
答案 0 :(得分:6)
恕我直言,如果您重写编译语句,如
gcc -I./ -o test main.c src_print1.c src_print2.c
你会好起来的。当您使用{{1}指定输出 二进制时,无需-c
标志 [注意] }。
此外,如此处所述,所有文件都在同一目录中,您甚至可以将语句缩短为
-o
建议:虽然上述更改将执行作业,但这不是优雅这样做的方式。请考虑创建一个makefile,让您的生活更轻松。
[注]:
关于 gcc -o test main.c src_print1.c src_print2.c
选项,根据online gcc manual,(强调我的)
-c
编译或汇编源文件,但不要链接。链接阶段根本没有完成。最终输出的形式为每个源文件的目标文件。
所以,现在应该清楚,为什么你得到错误。