为什么make $(abspath path)与当前目录连接结果?

时间:2014-01-22 16:10:50

标签: makefile

作为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)的值,如何阻止它?

2 个答案:

答案 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))))