我正在尝试让我的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
)会导致.
重新出现......
如果有人有任何建议,我们将不胜感激!
答案 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)