Почему Make не жалуется, когда целевой каталог - это файл? - PullRequest
0 голосов
/ 07 июня 2019

Появляется, если я делаю

touch output

и затем запустите make со следующим Makefile

output/:
    mkdir $@

Я получаю

make: 'output' is up to date.

, несмотря на то, что output является файлом, и, следовательно, output/ не является каталогом, который существует.

Почему Make не жаловался на это и не пытался запустить рецепт для целевого каталога?

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Насколько я понимаю (не уверен на 100%), это не совсем ошибка, это особенность.make 3.81 считает, что target и target/ одинаковы, а make 4.2.1 считает, что они являются разными целями.Как следствие, make 3.81 не пытается повторить output, в то время как make 4.2.1 делает и терпит неудачу, потому что файл output предотвращает создание каталога с тем же именем.

0 голосов
/ 07 июня 2019

Похоже, это ошибка, которая была исправлена ​​когда-то после версии 3.81 , потому что это не происходит в более поздних версиях, таких как 4.2.1:

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

В частностиэто означает, что эта ошибка все еще встречается в Mac OS X, так как Apple не переходит от старых версий программного обеспечения GNU.

Следовательно, для переносимости вам нужно защитить от этого в своих make-файлах.

...