我有一个makefile,它列出了许多要构建的静态库,每个库都在自己的子文件夹中 . 我在顶级makefile中将它们定义为:
LIBS= \
lib1 \
lib2 \
etc...
我正在尝试使用这些名称(例如lib / lib1,lib / lib2)将makefile转换到每个子文件夹中,并构建它找到的每个库的makefile . 我可以使用单个目标,而不是每个库的单独目标吗?
像这样的东西:
libs : $(LIBS)
$(LIBS) :
if [ -f /lib/${@}/makefile ]; then cd /lib/${@}; make; fi
我不确定$ @是否是正确的变量,因为只构建了第一个库 .
非常感谢!
2 回答
您提供的makefile片段(大部分)是正确的,应该按预期工作 . 如果您的真实makefile没有按预期工作,这意味着它与您在此处提供的示例之间存在不同之处 . 在那种情况下,我们无法提供帮助 . 请剪切并粘贴一个实际的失败示例,以及您调用的命令和您从make获得的输出 .
请注意,在调用sub-make时,不应使用静态
make
命令 . 始终使用$(MAKE)
变量 .使用'foreach'功能将简化规则 . 我认为以下makefile可以正常工作(未测试):