2015-08-03 2 views
0

Я стараюсь следующий Makefile:Как установить MAKEFLAGS из Makefile, чтобы удалить стандартные неявной правила

MAKEFLAGS += s 
MAKEFLAGS += r 

configure: 

Затем, когда я бегу сделать, я получаю следующие ошибки, как будто он хочет компилировать 'настройка', в какой-то по умолчанию неявной властвуй:

/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13 

Если я бегу:

make -r 

я не получаю вышеуказанные ошибки, вместо этого я получаю:

make: Nothing to be done for 'configure'. 

У меня есть идея, чтобы определить MAKEFLAGS из here:

Переменная «MAKEFLAGS» также может быть полезно, если вы хотите иметь определенные опции, такие как '-k' (* note Summary of Options: Options Summary.), которые устанавливаются каждый раз, когда вы запускаете make. Вы просто ставите значение для 'MAKEFLAGS' в вашей среде. Вы также можете установить «MAKEFLAGS» в файле make , чтобы указать дополнительные флаги, которые также должны быть действительны для , что makefile. (Обратите внимание, что вы не можете использовать «MFLAGS» таким образом, что переменная установлена ​​только для совместимости;. «Делать» не интерпретирует значение вы установили для него в любом случае.)

Когда «сделать» интерпретирует значение из «MAKEFLAGS» (либо из среды , либо из файла makefile), он сначала добавляет дефис, если значение еще не начинается с одного. Затем он отбрасывает значение в слова , разделенные пробелами, и анализирует эти слова так, как если бы они были опциями , указанными в командной строке (за исключением того, что '-C', '-f', '-h', '-o', '-W' и их именованные версии игнорируются, а ошибка для недействительна).

ответ

1

Вы не говорите, но, вероятно, вы используете слишком старую версию GNU make. Возможность удаления встроенных правил путем добавления -r к MAKEFLAGS внутри Makefile был добавлен в GNU Make 4.0, выпущенный в начале октября 2013 года

Важно помнить, что, когда вы смотрите на инструкции на веб-сайте GNU вас» пересматривая документацию для последней версии GNU make. Лучше прочитать документацию, которая поставляется с вашим дистрибутивом, так как это будет правильная версия руководства, связанного с версией GNU, которую вы используете.

ETA:

Вы должны использовать реальные флаги в MAKEFLAGS. Вы не можете просто использовать однобуквенные версии. Единственное время, когда разрешены однобуквенные опции, находится в первом слове значения переменной (я бы тоже удалил это, если бы это не требовалось стандарту). Вы писали:

MAKEFLAGS += s 
MAKEFLAGS += r 

, который дает значение для MAKEFLAGS (если вы бежите сделать без каких-либо других вариантов) от s r.Make добавит черту к первому слову, но не любые другие слова, поэтому это интерпретируется как -s r, а r не является опцией -r. Кроме того, если вам удалось запустить make с опцией, скажем, make -k, то MAKEFLAGS будет k s r, и make будет интерпретировать это как -k s r, а затем флаг -s также не будет установлен.

Короче говоря, просто предварять свои варианты с черточками всегда, когда вы хотите изменить MAKEFLAGS:

MAKEFLAGS += -s 
MAKEFLAGS += -r 
+0

теперь я попробовал последнюю версию. Все равно получите ту же ошибку. –