生成文件行“test-f”

Makefile line `test -f `

本文关键字:test-f 文件      更新时间:2023-10-16

我有一个Makefile,它包含以下行:

 $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<

你能解释一下这条线是干什么的吗?

注意:Makefile取自此处:https://projects.coin-or.org/BuildTools/wiki/user-examples

该页面指定:

通用编译规则(例如.c.o)看起来可能有点像复杂的但有了这个,Makefile也可以被人们使用在Cygwin下与MS编译器(例如cl)一起工作,因为编译器不了解UNIX类型的目录路径。在这样一个在这种情况下,CYGPATH_W将通过configure设置为"CYGPATH-W",否则就是"回声"。

我不打算使用MS编译器。

test -f是一个Unix ism,如果指定的文件存在,它将返回true,如果不存在,则返回false。"$<"是生成规则的源文件。因此,test -f '$<' || echo '$(SRCDIR)/'将检查源文件的存在,如果它确实存在而不存在,则将回显$(SRCDIR)/,后跟文件名。这将是实际编译器的输入。

它基本上是说"如果文件X存在于本地目录中,则编译它。否则(||就是这样做的),编译位于目录$(SRCDIR)中的名为X的文件"。通过这种方式,您可以将所有源代码放在一个子目录中,然后通过将某些文件的新副本放在与Makefile相同的目录中来覆盖这些文件。