如何解决设置目标变量作为子目录中makefile的名称
|| 如何在目标执行期间为$(MAKEFILE)定义变量? 基本上,我在为特定平台\“ Makefile.aix \”命名的子目录中有一些make文件,而在所有其他目录中只有Makefile。我想为每个子目录中定义的$(MAKEFILE)设置一个变量。代码看起来像这样。MAKEFILE = Makefile
SUBDIR = ./sub ./sub2
ifneq ($(wildcard Makefile),)
MAKEFILE = Makefile
else
MAKEFILE = Makefile.$(PLATFORM)
endif
all:;
@for i in $(SUBDIR);\\
do (\\
echo Making $$i ...;\\
cd $$i;\\
make -f $(MAKEFILE)\\
); done
解决方法
每个子目录中只有一个ѭ1,还是针对不同平台的几个?
在第一种情况下,您可以执行以下操作:
SUBDIR = ./sub ./sub2
定义脚本
cd $(1); \\
$(制作)-f Makefile *
恩迪夫
所有:
$(foreach目录,$(SUBDIR),$(调用脚本,$(dir)))
(定义内的空行很重要。如果在行
$(MAKE) ...
的末尾添加分号,导致出现一条长命令行,其中包含所有目录的命令,则可以将其分批执行,可以省略该行)
另一种“ 3”将是(只是您更喜欢个人喜好):
定义脚本
$(MAKE)-C $(1)-f $(notdir $(通配符$(1)/ Makefile *))
恩迪夫
如果目录中有多个“ 1”文件,则将变得更加困难。我将不得不再考虑一下。
更新:为了回应您的评论,类似这样的方法应该起作用:
定义脚本
$(MAKE)-C $(1)-f $(notdir $(通配符$(1)/ Makefile $(1)/ Makefile。$(PLATFORM)))
恩迪夫
,按照您的逻辑,我建议使用以下内容更新do()部分:
do (\\
echo Making $$i ...;\\
cd $$i;\\
if [ -f Makefile.$(PLATFORM) ] \\
then\\
make -f Makefile.$(PLATFORM) \\
else\\
make -f Makefile\\
fi\\
); done
这实际上不是一种制作风格,但是如果没有您的项目的具体说明,我无法提出更好的建议
,您可以使用GNU make \的内置函数来完成大多数操作,包括循环目录。将以下内容放在中央位置,例如$(TOP_DIR)/mk/subdir.mk
:
makefile-for-dir = \\
$(if $(wildcard $(1)/Makefile),Makefile,Makefile.$(PLATFORM))
make-recursive = \\
$(foreach _d,$(1),$(MAKE) -C $(_d) -f $(call makefile-for-dir,$(_d)) && ) :
在每个以递归方式启动的makefile中,使用
include $(TOP_DIR)/mk/subdir.mk
SUBDIRS = dir1 dir2 dir3
.PHONY: all
all:
+@$(call make-recursive,$(SUBDIRS))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。