"Кілька цільових шаблонів" Помилка Makefile


82

Мій файл make не працює з помилкою:

Makefile:34: *** multiple target patterns.  Stop.

Що це насправді означає, як я можу це виправити?

( Посібник GNU make , написаний капітаном Очевидним, не допомагає).


Знайшов його. У мене було правило у формі:

$(FOO): bar

де FOOбуло встановлено з команди оболонки, яка забруднила його повідомленням про помилку, яке містило двокрапку.




Ці відповіді є лише перефразою "у вас є кілька цільових зразків". Ну, думаю, ні. Як я можу це перевірити? Що може викликати це? Які запобіжні заходи необхідні для запобігання цій проблемі?
Kornel

2
Все працювало одну хвилину, а потім мій сценарій чхнув (напів) товсту кишку ... хе-хе. Випарувався, намагаючись знайти проблему принаймні за 3 години до того, як я знайшов вашу відповідь та @mcr. Ви щойно врятували мені відро поту!
GuruM

Справжньою першопричиною цієї проблеми є GNU Make - жахливий шматок гною, який мав загинути десятки років тому.
antred

Відповіді:


62

У мене це було на Makefile

MAPS+=reverse/db.901:550:2001.ip6.arpa 
lastserial:  ${MAPS}
    ./updateser ${MAPS}

Це через :ім’я файлу. Я вирішив це за допомогою

                      -------- повідомлення
                     //
                    vv
КАРТИ + = реверс / db.901 \: 550 \: 2001.ip6.arpa
lastserial: $ {MAPS}
    ./updateser $ {MAPS}

1
у мене така сама проблема, але я не розумію вашої відповіді, чи будете ви докладно це докладати для мене,
Пір Фахім Шах

4
@PirFahimShah У відповіді зазначено, що двокрапки в назві файлу (db.901: 550: 2001.ip6.arpa) потрібно уникати. mcr рятується від двокрапки, ставлячи зворотну скісну риску перед ними. Таким чином, make не трактує двокрапки як особливий символ.
Loduwijk

1
Дякую, у мене це вийшло. У мене був старий шлях Windows із двокрапкою ( C:/Qt/5.8/mingw53_32/bin/rcc.exe) в одному з правил Makefile. Видаліть ці автогенеровані файли make-файлів, якщо ви будуєте на машині Linux
Вадим Котов

windows make перейшов на wsl (ubuntu) і отримав цю помилку, make cleanа потім makeвирішив її. Помилкова лінія була_build/nrf52840_xxaa/app_mpu.c.o: ../../../app_mpu.c \
Тайет

22

Окрім того, що потрібно уникати двокрапки, як у оригінальній відповіді, я виявив, що якщо відступ вимкнено, ви могли б отримати таку саму проблему. В одному make-файлі мені довелося замінити пробіли табуляцією, і це дозволило мені подолати помилку.


GNU make може також повідомити "Немає правила для цілі" в цьому випадку.
davenpcj

4

Я просто хочу додати, якщо ви отримуєте цю помилку, оскільки ви використовуєте Cygwin make і автоматично згенеровані файли, ви можете виправити це за допомогою наступного sed,

sed -e 's@\\\([^ ]\)@/\1@g' -e 's@[cC]:@/cygdrive/c@' -i filename.d

Можливо, вам доведеться додати більше символів, ніж просто пробіл, до списку екранування під час першої заміни, але ви зрозуміли ідею. Концепція тут полягає в тому, що / cygdrive / c є псевдонімом для c: що виробник cygwin розпізнає.

І цілком може закинути

-e 's@^ \+@\t@'

про всяк випадок, коли ви все-таки почали з пробілів при аварії (хоча я / думаю / це, як правило, є помилка "відсутнього роздільника").


3

Я зустрів ту саму помилку. Потрудившись, я виявив, що це пов’язано з «пробілом» у назві папки.

Наприклад :

Раніше назва моєї папки була: "Qt Projects"

Пізніше я змінив його на: "QtProjects"

і моє питання було вирішено.

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


0

У мене була ця проблема (двокрапки в цільовій назві), оскільки -nв моєму GREP_OPTIONSсередовищі була змінна. Очевидно, це спричинило неправильне configureгенерування Makefile.


0

Мій IDE залишив поєднання пробілів та вкладок у моєму Makefile.

Встановлення мого Makefile для використання лише вкладок виправило цю помилку для мене.


0

Я також отримав цю помилку (в рамках Eclipse STM32CubeIDE у Windows).

Після подвійного клацання на помилку "кілька цільових шаблонів" він показав шлях до .ldфайлу. Виявляється, це ще одна проблема "незаконного персонажа". Образливим персонажем було (зачекайте): =

Евристика тижня: використовуйте лише [a..z] у своїх шляхах, оскільки неодмінно будуть інші нелегальні символи </vomit>.

Посібник з виготовлення GNU цього явно не документує.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.