当目标目录是文件时,为什么不投诉?

时间:2019-06-07 01:45:02

标签: makefile gnu-make

如果我愿意的话就会出现

touch output

,然后使用以下Makefile运行make

output/:
    mkdir $@

我明白了

make: 'output' is up to date.

尽管output是文件,因此output/不是存在的目录。

为什么不对此抱怨或尝试为目标目录运行配方?

2 个答案:

答案 0 :(得分:0)

这似乎是一个错误,该错误已在3.81版之后的某个时间修复,因为在较新的版本(如4.2.1版)中不会发生此错误:

mkdir output
mkdir: cannot create directory 'output': File exists

特别是,这意味着该错误仍然在Mac OS X上仍然存在,因为Apple并未从旧版本的GNU软件继续前进。

因此,出于可移植性的考虑,您需要在makefile中对此加以防范。

答案 1 :(得分:0)

据我了解(不是100%肯定),这并不是一个错误,它是一个功能。 make 3.81认为targettarget/相同,而make 4.2.1认为它们是不同的目标。结果,make 3.81不会尝试重做output,而make 4.2.1却会失败,因为文件output阻止创建具有相同名称的目录。

相关问题