GNU make: включать файл, только если цель не "чистая" - PullRequest
0 голосов
/ 20 мая 2019

Используя GNU make, я хочу включить файл , за исключением , если текущая цель «чистая».

То есть я хочу сделать эквивалент следующего:

ifneq($(TARGET),clean)
-include somefile.txt
endif

Но для этого мне нужна переменная, значением которой является цель, указанная в командной строке (здесь она называется $ (TARGET)).Такая переменная, кажется, не существует, и я могу понять, почему, потому что у вас может быть несколько целей в командной строке, некоторые из которых вы можете включить файл, а другие нет.На самом деле, было бы хорошо, если бы файл был включен, когда есть другие цели, кроме «чистой».Единственная реальная проблема, с которой я столкнулся на данный момент, заключается в том, что когда файл, который нужно включить, не существует, Make попытается создать его, что не нужно, когда вы собираетесь снова удалить его при выполнении «чистой» цели.

Итак, есть ли другой способ выполнить то, что я хочу?

1 Ответ

1 голос
/ 20 мая 2019

Вы можете использовать MAKECMDGOALS.Используйте его для обработки нескольких аргументов в командной строке:

ifeq (clean,$(filter clean,$(MAKECMDGOALS)))
-include somefile.txt
endif

Однако это часто чревато, потому что если вы запускаете make clean all или что-то еще, включаемый файл не будет включен, даже если он можетпонадобиться для all.

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

...