我有一个项目,其目录结构如下:
foo/
foo/Makefile
foo/bar/
我的目标是添加一个文件
foo/bar/Makefile
,这样如果我在foo/bar
中调用make
,就会使用父目录的Makefile。这是一种倒置的递归Makefile结构(我希望每个Makefile都调用父目录,直到达到项目根目录)。由于从错误的目录调用符号链接会破坏所有相对路径,因此符号链接失败:
$ ln -s ../Makefile foo/bar/Makefile
$ make -C foo/bar
[error]
我找到的唯一解决方案是编写一个 Makefile,其中包含我感兴趣的所有目标,并使用该目标调用父目录:
$ cat foo/bar/Makefile
all clean:
$(MAKE) -C .. $@
这种方法很繁琐且容易出问题。是否有更加优雅的解决方案呢?
原因
该项目是一个包含多个子目录的大型LaTeX文档,其中包括章节、图片等.tex
文件。我想能够在任何一个子目录中调用make
来构建文档。
$(MAKE) -C /path/to/project/root $@
呢?这样,你只需要一个递归调用Make而不是多个,而且一个破损的makefile不会影响到树下面的所有文件。 - Beta