GNU Make:如何在列表的每个条目前面添加一个选项

GNU Make: How to add an option in front of every entry of a list

本文关键字:添加 前面 目前 选项 一个 GNU 列表 Make      更新时间:2023-10-16

我有一个问题,我想创建一个看起来像这样的变量,

INCDIRS = -I dir0 -I dir1 -Idir2 -I dir3 ... -I dirN

其中 dir1, ... , dirN 是某个基目录base_dir的所有子目录的名称。

我将如何构建此变量? 最初,我认为我可以做到以下几点,

INCDIRS = $(shell for x in `find base_dir -type -d -print`; do echo -I $x; done;)

但这只会导致

INCDIRS = -I -I -I -I ... -I

如果有人能解释如何做到这一点,或者解释为什么我的原始命令得到了它所做的输出,我将不胜感激。 谢谢!

您的INCDIRS作业中有两个错误。一个是在find命令中。它应该是find -type d -print的(或者只是find -type d;这里的-print是多余的)。另一个错误是使用$x。您需要用另一个$逃离$

INCDIRS = $(shell for x in `find base_dir -type d -print`; do echo -I $$x; done;)

您可以先获取目录列表,然后在每个目录前面添加 -I:

SOURCE_DIRS := $(shell find base_dir -type d -print)
INCDIRS      = $(addprefix -I,$(SOURCE_DIRS))

如果您需要 $(SOURCE_DIRS) 用于其他内容,这可能会更好。