首页 文章

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

提问于
浏览
1

我有一个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 回答

  • 1

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

    请注意,在调用sub-make时,不应使用静态 make 命令 . 始终使用 $(MAKE) 变量 .

  • 1

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

    LIBS := lib1 lib2 lib3
    
    
    libs: 
         -@$(foreach l, $(LIBS), make -C /lib/$(l))
    

相关问题