makefile,在几个子目录中设计构建的最佳方法是什么

时间:2013-07-16 15:26:19

标签: makefile gnu-make

我有一个包含c ++和java代码的项目, 结构现在看起来像:

  dev -- |--- display1 (sub makefile:needs compile both c++ and java)
         |--- display2 
         |--- ddv      (sub makefile: needs compile both c++ and java)
         |--- def
         |--- Install  (makefile: call sub makefiles in the other 4 folders)

我想知道他们是否是其他更好的方法来处理这个案子。 例如,如果有方法在子目录中使用source生成makefile,则在这种情况下只使用一个makefile。任何建议将不胜感激。

我是makefile的新手,希望在这里得到好的建议。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您是Make的新手,您应该从简单的任务开始,然后处理复杂的任务。

假设您有display1/disp1.cc并希望构建display1/disp1.o。您可以使用Install/Makefile中的规则执行此操作:

display1/disp1.o: display1/disp1.cc
    g++ -c display1/disp1.cc -o display1/disp1.o

在继续之前完成工作。然后您可以在Install/Makefile中有几个这样的规则:

display1/disp1.o: display1/disp1.cc
    g++ -c display1/disp1.cc -o display1/disp1.o

display1/foo1.o: display1/foo1.cc
    g++ -c display1/foo1.cc -o display1/foo1.o

display1/foo2.o: display1/foo2.cc
    g++ -c display1/foo2.cc -o display1/foo2.o

然后您可以使用自动变量来使规则更清晰:

display1/disp1.o: display1/disp1.cc
    g++ -c $< -o $@

display1/foo1.o: display1/foo1.cc
    g++ -c $< -o $@

display1/foo2.o: display1/foo2.cc
    g++ -c $< -o $@

在继续操作之前完成正常工作。然后您可以使用pattern rule替换所有这些规则:

display1/%.o: display1/%.cc
    g++ -c $< -o $@

让它工作......好吧,你明白了。那么你可以为其他目录编写更多的模式规则:

display1/%.o: display1/%.cc
    g++ -c $< -o $@

display2/%.o: display2/%.cc
    g++ -c $< -o $@

ddv/%.o: ddv/%.cc
    g++ -c $< -o $@

def/%.o: def/%.cc
    g++ -c $< -o $@

然后还有四个模式规则来覆盖java(我可以尝试,但我不是javanaut。)

然后,您可以编写目标列表并将它们保存在各自的目录中,并使用include指令将它们拖入Install/Makefile

你可以做的更多,但是这一点应该让你忙碌一段时间。如果您遇到麻烦,请告诉我们。