我有两个C文件(第一个文件需要另一个文件)。
我应该使用#include "XXX.C"
,但我如何制作单独的.obj文件然后连接它(类似Borland的项目)?我读了一些关于link a, b
命令的内容,但它不起作用,我找不到任何参考。
谢谢!
答案 0 :(得分:4)
你不应该使用#include“XXX.C”。如果你想单独编译它。 你必须写一个“XXX.h”,其中包含你要调用的所有函数。
之后,您可以单独编译文件:
gcc -c YYY.c -o yyy.o
gcc -c XXX.c -o xxx.o
如果你想在一次通过中编译和链接:
gcc xxx.c yyy.c -o xxx
或者如果你想编译xxx.c并使用之前生成的目标文件:
gcc xxc.c yyy.o -o xxx
甚至:
gcc xxx.o yyy.o -o xxx
在最后一个例子中,gcc会调用链接器,因为没有可编译的源代码。
但如果您有两个或三个以上的文件,接下来要检查的是如何使用Makefile。
示例:
xxx.c:
#include "yyy.h"
int x(int a)
{
return a + 1;
}
int main(int argc, char **argv)
{
x(1);
y(2);
return 0;
}
yyy.c:
int y(int b)
{
return b + 2;
}
yyy.h:
#pragma once
int y(int b);
可以单独编译:
gcc -c yyy.c -o yyy.o
gcc xxx.c yyy.o -o xxx
在此示例中,xxx.c调用yyy.c上定义的函数。
答案 1 :(得分:1)
不,你不应该使用#include "XXX.c"
。只应包含标题;代码文件应该彼此分开编译。
它是如何完成的取决于您的编译器,但通常您只需将文件逐个列出到编译器,如下所示:
gcc main.c helpers.c functions.c
答案 2 :(得分:1)
您应该为每个目标文件提供.h(header, with declarations)和(至少一个).c(带实现)文件。
有关标题文件的详细信息,请转到here。
然后你只需要这样做:
#include "XXX.h"
包含头文件,而不是.c文件!