我有一个包含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的新手,希望在这里得到好的建议。谢谢!
答案 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
。
你可以做的更多,但是这一点应该让你忙碌一段时间。如果您遇到麻烦,请告诉我们。