2016-07-30 29 views
1

我是新来的ifle 我想测试我的主要特定功能。这个功能在c文件里有很多依赖关系,我甚至无法跟踪是否可以使用.d文件来编译所有依赖的c文件?

是否有可能使用该.c文件的.c文件来编译我的主程序以获得此函数在我的小应用程序中工作以及.d文件获取所有依赖关系?

我就在想,如果有可能做这样的事情

mymain.o : requiredfunctions.d mymain.c 
+0

当你说“依赖性”,你的意思是头文件(例如' mymain.c'有一行'#include'kitchensink.h'')? – Beta

+0

实际上,“requiredfunctions.c”文件编译所需的所有c文件 – becks

+0

我知道d文件只包含头文件,但如果我可以使用它来完成这项工作,尽可能地做到这一点 – becks

回答

1

你似乎误会源文件,头文件,目标文件和可执行文件之间的关系。

假设我们有几个功能:

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))) 
+0

正确。这是我想要做的?我只有这个文件的.d文件octobus.c – becks

+0

@becks:如果我告诉你如何将'octopus.d'变成列表'alpha.o beta.o ... omega.o'将那够了?我问,因为描述整个链条会使这个答案太长。 – Beta

+0

是的,这会回答我的问题 – becks

相关问题