我是新来的ifle 我想测试我的主要特定功能。这个功能在c文件里有很多依赖关系,我甚至无法跟踪是否可以使用.d文件来编译所有依赖的c文件?
是否有可能使用该.c文件的.c文件来编译我的主程序以获得此函数在我的小应用程序中工作以及.d文件获取所有依赖关系?
我就在想,如果有可能做这样的事情
mymain.o : requiredfunctions.d mymain.c
我是新来的ifle 我想测试我的主要特定功能。这个功能在c文件里有很多依赖关系,我甚至无法跟踪是否可以使用.d文件来编译所有依赖的c文件?
是否有可能使用该.c文件的.c文件来编译我的主程序以获得此函数在我的小应用程序中工作以及.d文件获取所有依赖关系?
我就在想,如果有可能做这样的事情
mymain.o : requiredfunctions.d mymain.c
你似乎误会源文件,头文件,目标文件和可执行文件之间的关系。
假设我们有几个功能:
void alpha();
void beta();
void gamma();
void delta();
...
每个在头文件(alpha.h
)被声明,并在源文件(alpha.c
)所定义。现在假设这些功能是独立的;他们不会互相打电话。编译其中之一(以产生一个目标文件)很简单:
gcc -c beta.c -o beta.o
(以下简称“-cc -oo”只是一个巧合的-c
的意思是“建立一个目标文件”,以及-o
手段。 “以下是如何命名结果”)。
我们还有一个函数void octopus()
,它调用所有这些函数。我们宣布它的头,octopus.h
:
// octopus.h
void octopus();
,并在源文件中定义它,octopus.c
:
#include "alpha.h"
#include "beta.h"
...
#include "omega.h"
void octopus()
{
... // calls alpha(), beta(), etc.
}
生产目标文件很简单:
gcc -c octopus.c -o octopus.o
现在假设我们有一个文件,mymain.c
,其中包含main()
并调用一些函数:
#include "alpha.h"
#include "beta.h"
int main()
{
alpha();
beta();
return 0;
}
构建目标文件mymain.o
很简单:
gcc -c mymain.c -o mymain.o
构建可执行mymain
是稍难:
gcc mymain.o alpha.o beta.o -o mymain
如果这一切是明确的,那我可以尝试猜你想要什么。你想main()
打电话给octopus()
,并且你想让Make为你建立可执行文件即使你不知道列表alpha, beta,... omega
,是吗?
编辑:如果你有文件octopus.d
:
octopus.o: octopus.c alpha.h beta.h ... omega.h
,你可以把它变成所需的对象文件的列表:
alpha.o beta.o ... omega.o
通过多种方法的。
sed 's/.*\.c //;s/h /o /g' octopus.d
,或者你可以使用make的文本处理函数生成文件中:你可以使用命令行的sed
OBJECTS := $(subst .h,.o,$(filter %.h, $(shell cat octopus.d)))
当你说“依赖性”,你的意思是头文件(例如' mymain.c'有一行'#include'kitchensink.h'')? – Beta
实际上,“requiredfunctions.c”文件编译所需的所有c文件 – becks
我知道d文件只包含头文件,但如果我可以使用它来完成这项工作,尽可能地做到这一点 – becks