作为makefile配方的一部分,我有:
@echo SOMEDIR:$(SOMEDIR)
@echo abspath:$(abspath $(SOMEDIR))
产生:
SOMEDIR:D:/one/two/three/../../four
abspath:D:/P4_sandbox/depot/ssg/embedded/industrial/MotorControl/ReferenceDesigns/DriveOnChip_SingleIPOneEach_SoC_FFT/software/CVSX_DS5/APP_RD/D:/one/four
我希望得到:
SOMEDIR:D:/one/two/three/../../four
abspath:D:/one/four
为什么abspath将其结果连接到$(CURDIR)的值,如何阻止它?
答案 0 :(得分:1)
这就是abspath
的作用。它创造了一条绝对的道路。这意味着它必须锚定在根。 abspath
不仅仅是canonicalize path
。
您需要subst
关闭或获取您想要的行为。
答案 1 :(得分:1)
实际上,abspath对驱动器号指定不满意。再次尝试使用D:删除。如果你不能预先删除D:那么你将不得不写一个gmake宏(包装器)。没有gmake,这里是FP的一个练习,定义了三个宏,以便$(ABSPATH $(mypathvar))工作......
_FLIP = $2 $1 _ABSPATH = $(subst \ ,:, $(strip $2 $(abspath $1))) ABSPATH = $(_ABSPATH $(FLIP $(subst :, ,$1))))