makefile 循环:轻松注释掉一些项目
makefile loop: easily comment out some items
我有一个 makefile 循环遍历某些项目,如下所示:
all:
for i in \
foo \
bar \
baz \
; do \
echo $$i ;\
done
在调试时,我经常注释掉除了一个循环行之外的所有行,但随后我需要将这些行移到 for
上方,否则我会收到此错误:
/bin/sh: 3: Syntax error: word unexpected (expecting "do")
问题:是否有更好的设置方法,可以轻松地在 makefile 中注释掉循环行?注意:我不想为每个循环项目创建单独的目标。
您使用的是续行(尾部反斜杠),因此您的食谱等同于:
for i in foo bar baz; do echo $$i ; done
并且您不能只在所有这些中间放置一个 #
,make 会忽略该行并且您会破坏您的行连续性。你必须找到一个 shell 兼容的方式。例如,如果您的 shell 是 bash,并且评论项目包括在前面加上 -
:
all:
@for i in \
foo \
-bar \
baz \
; do \
[[ "$$i" != -* ]] && echo $$i ;\
done
演示:
$ make
foo
baz
还有很多其他方法可以做到,这完全取决于您想要什么。此外,由于我们没有您的实际 makefile,只有一个示例,因此不清楚实际的 makefile 是否提供其他机会来使事情变得更好。我不知道有什么方法比在所有情况下都只移动线更客观。
一个想法,因为你正在使用 make,所以 pre-create 使用 make 变量的循环内容如下:
DATA =
DATA += foo
DATA += bar
DATA += baz
all:
for i in $(DATA); do \
echo $$i ;\
done
现在您可以注释掉不需要的 DATA += ...
行。
另一种可能性是使用变量,并过滤掉不需要的条目:
list=foo bar baz
all:
@for i in $(filter_out bar,$(list)); do \
echo $$i
我有一个 makefile 循环遍历某些项目,如下所示:
all:
for i in \
foo \
bar \
baz \
; do \
echo $$i ;\
done
在调试时,我经常注释掉除了一个循环行之外的所有行,但随后我需要将这些行移到 for
上方,否则我会收到此错误:
/bin/sh: 3: Syntax error: word unexpected (expecting "do")
问题:是否有更好的设置方法,可以轻松地在 makefile 中注释掉循环行?注意:我不想为每个循环项目创建单独的目标。
您使用的是续行(尾部反斜杠),因此您的食谱等同于:
for i in foo bar baz; do echo $$i ; done
并且您不能只在所有这些中间放置一个 #
,make 会忽略该行并且您会破坏您的行连续性。你必须找到一个 shell 兼容的方式。例如,如果您的 shell 是 bash,并且评论项目包括在前面加上 -
:
all:
@for i in \
foo \
-bar \
baz \
; do \
[[ "$$i" != -* ]] && echo $$i ;\
done
演示:
$ make
foo
baz
还有很多其他方法可以做到,这完全取决于您想要什么。此外,由于我们没有您的实际 makefile,只有一个示例,因此不清楚实际的 makefile 是否提供其他机会来使事情变得更好。我不知道有什么方法比在所有情况下都只移动线更客观。
一个想法,因为你正在使用 make,所以 pre-create 使用 make 变量的循环内容如下:
DATA =
DATA += foo
DATA += bar
DATA += baz
all:
for i in $(DATA); do \
echo $$i ;\
done
现在您可以注释掉不需要的 DATA += ...
行。
另一种可能性是使用变量,并过滤掉不需要的条目:
list=foo bar baz
all:
@for i in $(filter_out bar,$(list)); do \
echo $$i