makefile,在几个子目录中设计构建的最佳方法是什么 我有一个项目,包括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,在几个子目录中设计构建的最佳方法是什么 我有一个项目,包括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,gnu-make,Makefile,Gnu Make,我想知道是否还有其他更好的方法来处理这个案件。 例如,如果有方法在子目录中生成源代码为的makefile,则在这种情况下只使用一个makefile。如有任何建议,将不胜感激 我是makefile的新手,希望能在这里得到好的建议。谢谢 如果你是新手,你应该从简单的任务开始,到复杂的任务 假设您有display1/disp1.cc,并且想要构建display1/disp1.o。您可以使用安装/Makefile中的规则执行此操作: display1/disp1.o: display1/disp1.cc

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


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

如果你是新手,你应该从简单的任务开始,到复杂的任务

假设您有
display1/disp1.cc
,并且想要构建
display1/disp1.o
。您可以使用
安装/Makefile
中的规则执行此操作:

display1/disp1.o: display1/disp1.cc
    g++ -c display1/disp1.cc -o display1/disp1.o
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
在继续操作之前,请将其完美地工作。然后,您可以在
安装/Makefile
中有几个这样的规则:

display1/disp1.o: display1/disp1.cc
    g++ -c display1/disp1.cc -o display1/disp1.o
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/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 $@
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

你还可以做更多的事情,但那会让你忙上一段时间。如果你遇到麻烦,请告诉我们