我有一个使用Makefile构建的C++库。直到最近,所有源文件都在一个目录中,Makefile做了类似的事情
SOURCES = $(wildcard *.cpp)
效果很好。

现在,我在子目录中添加了一些源,例如subdir。我知道我能做到
SOURCES = $(wildcard *.cpp) $(wildcard subdir/*.cpp)
但是我正在寻找一种避免手动指定subdir的方法,也就是说,使wildcard进入子目录,或者以某种方式生成子目录列表,并使用几个wildcard函数对其进行扩展。在这一点上,有一个非递归的解决方案(即只扩展第一级)就可以了。

我什么都没找到-我最好的猜测是使用find -type d列出子目录,但是感觉像是黑客。有内置的方法吗?

最佳答案

应该这样做:

SOURCES = $(wildcard *.cpp) $(wildcard */*.cpp)

如果您改变主意并想要递归解决方案(即任何深度),都可以完成,但是它涉及一些更强大的Make函数。您知道,那些可以让您做您本不该做的事情。

编辑:
杰克·凯利(Jack Kelly)指出,至少在某些平台上,$(wildcard **/*.cpp)使用GNUMake 3.81可以发挥任何深度。 (他怎么知道的,我不知道。)

关于makefile - 来自Makefile中子目录的源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4036191/

10-13 03:23