0

我有一个包含 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)

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

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

4

1 回答 1

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 $@

在你继续之前让它完美地工作。然后你可以用模式规则替换所有这些规则:

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.

您还可以做更多的事情,但这应该会让您忙一阵子。如果您遇到麻烦,请告诉我们。

于 2013-07-16T16:29:22.140 回答