makefile可以使用一行构建多个目标吗?

时间:2014-01-08 15:33:50

标签: c makefile

我有一个makefile,它列出了许多要构建的静态库,每个库都在自己的子文件夹中。我在顶级makefile中定义了这些:

LIBS= \
lib1 \
lib2 \
etc...

我正在尝试使用这些名称(例如lib / lib1,lib / lib2)将makefile转换到每个子文件夹中,并构建它找到的每库文件。我可以使用单个目标,而不是每个库的单独目标吗?

这样的事情:

libs : $(LIBS)

$(LIBS) :
    if [ -f /lib/${@}/makefile ]; then cd /lib/${@}; make; fi

我不确定$ @是否是正确的变量,因为只构建了第一个库。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您提供的makefile片段(大部分)是正确的,应该按预期工作。如果您的真实makefile没有按预期工作,这意味着它与您在此处提供的示例之间存在不同之处。在那种情况下,我们无法提供帮助。请剪切并粘贴一个实际失败的示例,以及您调用的命令和您从make获得的输出。

请注意,在调用子品牌时,从不使用静态make命令。 始终使用$(MAKE)变量。

答案 1 :(得分:1)

使用'foreach'功能将简化规则。我认为以下makefile可以正常工作(未经测试):

LIBS := lib1 lib2 lib3


libs: 
     -@$(foreach l, $(LIBS), make -C /lib/$(l))