不是make的bug。
在你的Makefile里,$(abspath %)会把相对路径转为绝对路径,但对已经是绝对路径的目录,比如/abs_dir1,它也当成当前工作目录的相对路径来处理,从而得到/home/user/make_test//abs_dir1这样的输出。
解决方法是在处理过程中检查路径是否已经是绝对路径。已经是绝对路径就不转了 ---- 在make中检查一个路径是相对的还是绝对的很容易,看看打头的字符是不是 / 就齐了。
下面是个更新后的Makefile:
IN := rel_dir1 rel_dir2 /abs_dir1
OUT := $(foreach d,$(IN),$(if $(filter /%,$d),-I$d,-I$(abspath $d)))
show:
@echo $(OUT)
↑↑注意 @echo前的缩进必须是 tab !! make 是不认空格的,但帖子只能是空格。
这里用$(foreach ...)来遍历IN变量中的每个目录,并且对每个目录用$(if $(filter /%,$d),...)来检查它是相对路径还是绝对路径。
如果它以/开头(即绝对路径),就直接加-I前缀;
如果不是,我们就使用$(abspath ...)将其转换为绝对路径,并添加-I前缀。
当你在/home/user/make_test目录下执行这个修改过的Makefile时,得到的输出应当是:
-I/home/user/make_test/rel_dir1 -I/home/user/make_test/rel_dir2 -I/abs_dir1
大概是这个意思吧,有问题你自己再调调
--
FROM 123.125.204.*