Makefile addprefix删除点

时间:2017-10-27 18:25:42

标签: makefile

我正在尝试让我的Makefile将当前文件夹中的目录添加到路径列表中。类似于此的东西:

FILES = path/to/first path/to/second path/to/third

PREPENDED_FILES = $(addprefix ./localdir/, $(FILES))

all: $(PREPENDED_FILES)
    echo $^

理想情况下,make all的输出为:

./localdir/path/to/first ./localdir/path/to/second ./localdir/path/to/third

但由于我不清楚的原因,最初的.被剥夺了所以我得到了:

/localdir/path/to/first /localdir/path/to/second /localdir/path/to/third

由于很多理由与我的实际代码有关,遗憾的是我无法使用绝对路径,因此用./localdir代替$(PWD)将无效 - 我真的需要前导.输出。我还注意到将它包装在另一个函数中(例如warning)会导致.重新出现......

如果有人有任何建议,我们将不胜感激!

2 个答案:

答案 0 :(得分:0)

您可以通过引用前缀来保留点:

PREPENDED_FILES = $(addprefix "./localdir/", $(FILES))

这将打印

./localdir/path/to/first ./localdir/path/to/second ./localdir/path/to/third

答案 1 :(得分:0)

在这里也有类似的痛苦,并受到您的hint above的驱使,我推测此行为的根本原因是实施Features of GNU make

Strip leading sequences of ‘./’ from file names, so that ./file and file are considered to be the same file.

并且您已经发现,针对您这样的情况的解决方法是将代码重写为:

FILES = path/to/first path/to/second path/to/third

PREPENDED_FILES = $(addprefix ./localdir/, $(FILES))

all: $(PREPENDED_FILES)
    echo $(PREPENDED_FILES)