2016-12-08 4 views
2

Глядя на GNU make manual, какая именно разница между empty recipe и нет рецепта (например, см. Один экземпляр в Rules without Recipes or Prerequisites)? Что еще более важно, когда следует использовать/избегать каждого из этих двух рецептов?GNU сделать пустой рецепт против рецепта

В моем текущем понимании, всегда следует использовать

target: ; 

, потому что иногда неявное правило может победить свою цель нет правил.

ответ

2

У данной цели может быть только один рецепт. Если вы объявите пустой рецепт, то вы теперь указали на эту цель, и этот рецепт не будет искать по неявным правилам. Также, если вы попытаетесь дать той же цели другой рецепт, тогда make будет жаловаться.

«Без рецепта» означает, что вы добавляете дополнительные предпосылки к существующей цели или, если вы не перечислите предварительные условия, вы просто сообщаете, что это цель, которую вы заинтересовали. не переопределяя любой поиск рецепта, который сделает, будет делать в другом месте.

Это определенно неверно, что вы всегда должны использовать тот или иной: тот, который вы используете, зависит от того, чего вы пытаетесь достичь.

Я не знаю, что вы имеете в виду, когда говорите победить свое назначение без правил, поэтому я не могу ответить на это ... чего вы пытаетесь достичь, когда говорите «нет правила»?

+0

В моем нынешнем понимании я сказал:) Если я не ошибаюсь, это на вашем сайте о http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/, что я видел другой пример. В .d-файлах вы добавили автоматически созданное предварительное условие в качестве новой цели с ** без рецепта ** (и «% .d» с ** пустым рецептом **). Но на самом деле, в этом конкретном случае файлы '.h' не имеют никакого неявного правила. Но в других случаях, возможно, это вызовет какое-то неявное правило, которое я могу предотвратить с явным пустым рецептом? –

+0

Конечно, может быть. Я не уверен, что понимаю этот вопрос. – MadScientist

Смежные вопросы