【问题标题】:GNU Make: How to add an option in front of every entry of a listGNU Make:如何在列表的每个条目前添加一个选项
【发布时间】:2012-11-21 02:26:14
【问题描述】:

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

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

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

【问题讨论】:

  • 总是--warn运行make。然后你会被告知Makefile:n: warning: undefined variable 'x'。然后你会意识到$x 被make 扩展(到什么都没有),之前 将不正确的命令行传递给shell。 (你应该说... do echo -I $$x ...。)

标签: c++ c makefile gnu-make


【解决方案1】:

您的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;)

【讨论】:

  • 嗨 Martega,如果这能解决您的问题,我认为 David 值得您将他的答案标记为已接受的答案。
【解决方案2】:

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

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

如果您需要 $(SOURCE_DIRS) 来做其他事情,这可能会更好。

【讨论】:

  • 谢谢,这就是我一直在寻找的!
猜你喜欢
  • 2021-12-22
  • 2011-11-28
  • 2021-08-10
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多