|
GNU make в windows, Проблемы и их решения |
|
|
|
Jun 4 2009, 07:51
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Добрый день! gnu make не хочет понимать пути с пробелами. Как объяснить? Код CC = c:/Files/IAR Systems/Embedded Workbench 5.4 Evaluation/arm/bin/iccarm.exe // почему-то понимает INC1_PATH = ../../Common INC2_PATH = ./Include INC3_PATH = c:/Files/IAR Systems/Embedded Workbench 5.4 Evaluation/arm/INC // не понимает
DLIB_CONFIG_FILE = c:/Files/IAR Systems/Embedded Workbench 5.4 Evaluation/arm/INC/DLib_Config_Normal.h
CC_OPT = -I. -I\""$(INC2_PATH)/\"" -I\""$(INC3_PATH)/\""
main.o: main.cpp @echo ------------------------ compiling $< ------------------------ $(CC) main.cpp $(CC_OPT)
all: main.o Выдаёт следующее: /usr/bin/sh: c:/Files/IAR: No such file or directory make: *** [main.o] Error 127
|
|
|
|
|
 |
Ответов
|
Jun 4 2009, 13:44
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(AHTOXA @ Jun 4 2009, 13:19)  Это не мейк дурит, а sh. Я так не нашёл нормального. Выкинул нафиг. Это действительно шелл (о чем написано в сообщении об ошибке, которое надо было внимательно читать), а не мейк. Но шелл в данном случае вовсе не дурит, а ведет себя совершенно правильно. Ему передали такую команду: Код c:/Files/IAR Systems/Embedded Workbench 5.4 Evaluation/arm/bin/iccarm.exe main.cpp -I. -I\""./Include/"\" -I\""c:/Files/IAR Systems/Embedded Workbench 5.4 Evaluation/arm/INC/"\" В этой команде первый ничем не экранированный пробел стоит после c:/Files/IAR. Поэтому c:/Files/IAR шелл трактует как имя команды, все остальное - как ее параметры. Также замечу, что эту вызвавшую ошибку команду мейк выводит на экран, и ее тоже стоило внимательно прочитать - все стало бы ясно.
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jun 4 2009, 15:42
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(xemul @ Jun 4 2009, 21:04)  У любого уважающего себя шелла на путь с пробелами (или любой аргумент с пробелами), не оформленный должным образом (общепринято - кавычками, хотя без труда переопределяется), приключится такой же рвотный рефлекс. Да. Да. Да! Поэтому я согласился, что в этом случае шелл ведёт себя правильно  А вот пример неправильного поведения (их у меня много): кусок makefile: Код target = test1 ... archiver = Rar.exe ... rars = $(src_dir)/*.c $(src_dir)/*.h $(prj_dir)/*.* $(base)/makefile $(base)/*.mpj ... archive: @echo --- archiving... $(archiver) a -r -agyy-mm-dd,hh-nn-ss $(bak_dir)/$(target)_.rar $(rars) @echo --- done! как это работает без шелла (удалил из пути): Код >make archive --- archiving... Rar.exe a -r -agyy-mm-dd,hh-nn-ss ./bak/test1_.rar ./src/*.c ./src/*.h ./prj/*.* ./makefile ./*.mpj Creating archive ./bak/test1_09-06-04,21-33-44.rar Adding ./src/config.c OK Adding ./src/main.c OK Adding ./src/rs1.c OK Adding ./src/term\commands.c OK Adding ./src/term\handlers.c OK Adding ./src/term\vars.c OK Adding ./src/config.h OK Adding ./src/gpio.h OK Adding ./src/rs1.h OK Adding ./src/term\commands.h OK Adding ./src/term\handlers.h OK Adding ./src/term\vars.h OK Adding ./prj/stm32f10x_flash_md.ld OK Adding ./makefile OK Adding ./test1.mpj OK Done --- done! и с шеллом (вернул): Код >make archive --- archiving... Rar.exe a -r -agyy-mm-dd,hh-nn-ss ./bak/test1_.rar ./src/*.c ./src/*.h ./prj/*.* ./makefile ./*.mpj Creating archive ./bak/test1_09-06-04,21-24-00.rar Adding ./src/config.c OK Adding ./src/main.c OK Adding ./src/rs1.c OK Adding ./src/config.h OK Adding ./src/gpio.h OK Adding ./src/rs1.h OK Adding ./prj/stm32f10x_flash_md.ld OK Adding ./makefile OK Adding ./test1.mpj OK Done --- done! Видите разницу? Под шеллом Rar не увидел папочки /src/term!  Я живу себе в полной уверенности, что у меня всё занычено в архив, а не тут-то было. Вот такая вот засада  Поэтому я выкинул sh, и ничуть не жалею. ЗЫ. Только не говорите, что это Rar виноват, потому что у меня много других примеров
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 5 2009, 11:07
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(AHTOXA @ Jun 4 2009, 20:42)  Видите разницу? А можно еще показать содержимое директория src (вывод ls -l src например)? Цитата(AHTOXA @ Jun 4 2009, 20:42)  Под шеллом Rar не увидел папочки /src/term!  А должен был? Папочка src/term не подпадает ни под одну из указанных в командной строке масок (в "term" нет точки например)! Цитата(AHTOXA @ Jun 4 2009, 20:42)  ЗЫ. Только не говорите, что это Rar виноват, потому что у меня много других примеров  Не буду. Он не виноват. В этом случае, похоже, виноват программист.  Цитата(AHTOXA @ Jun 4 2009, 21:10)  Но объясните мне тогда, зачем sh, вместо того, чтобы просто вызвать заказанную программу с заказанными аргументами, ещё и подменяет системные вызовы для этой программы? Я так понял, что не срабатывает рекурсивный поиск внутри самого Rar-а. Почему Вы решили, что он не срабатывает? Насколько я вижу, у Вас в директории ./src/ есть файлы config.c, main.c и rs1.c. Правильно? Во вложенных в src директориях (том же term например) есть файлы с такими именами? Что-то мне подсказывает, что нет. Тогда какой рекурсии Вы ждете? При наличии файлов с одинаковыми именами рекурсия работает, я только что проверил. Причина разного поведения rar'а кроется в передаче ему при вызове разных аргументов, а вовсе не подмена каких-либо системных вызовов... Цитата(xemul @ Jun 4 2009, 22:17)  Возможно, проще будет формировать скриптом список файлов, подлежащих упаковке, и скармливать его rar'у. ИМХО в данном случае проше изучить документацию на шелл и правильно им пользоваться. В частности, если программист не хочет, чтобы шелл выполнял подстановку имен файлов вместо содержащих "*" аргументов, он должен сообщить об этой шеллу, например заэкранировав звезду бэкслешем или взяв аргумент в одинарные кавычки... Цитата(AHTOXA @ Jun 4 2009, 22:35)  А как быть с другими, которые я перечислил? Как, например, запустить cmd с параметрами? Это единственный шелл, о котором я неодновретно слышал отрицательные отзывы именно в плане работы с make. Это плохой, негодный шелл. Лучше им просто не пользоваться. Параметры же ему передаются с символом слэш вместо минуса. Цитата(AHTOXA @ Jun 5 2009, 01:08)  если make вдруг решит запустить их без sh... Насколько мне известно, самого наличия "*" в командной строке вполне достаточно чтобы гнутый make звал шелл.
Сообщение отредактировал alx2 - Jun 5 2009, 11:17
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jun 5 2009, 12:06
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(alx2 @ Jun 5 2009, 17:07)  А можно еще показать содержимое директория src (вывод ls -l src например)? Зачем? Вроде всё уже выяснили. Там исходники и подкаталог с исходниками (*.c и *.h) Цитата А должен был? Папочка src/term не подпадает ни под одну из указанных в командной строке масок (в "term" нет точки например)!/quote] Должен был. Ибо ключик -r для Rar требует рекурсивного обхода заданных путей. Без sh же всё срабатывает. Цитата Не буду. Он не виноват. В этом случае, похоже, виноват программист.  Узнаю линупсоеда:-) Виноват может быть кто угодно, только не линупс:-) Вы бы почитали тред повнимательнее, ведь мы с ReAl-ом уже во всём разобрались. Цитата Почему Вы решили, что он не срабатывает? Насколько я вижу, у Вас в директории ./src/ есть файлы config.c, main.c и rs1.c. Правильно? Во вложенных в src директориях (том же term например) есть файлы с такими именами? Что-то мне подсказывает, что нет. Тогда какой рекурсии Вы ждете? При наличии файлов с одинаковыми именами рекурсия работает, я только что проверил. Причина разного поведения rar'а кроется в передаче ему при вызове разных аргументов, а вовсе не подмена каких-либо системных вызовов... Да, с этим уже разобрались. Sh не подменял системные вызовы, sh зачем-то самовольно развернул звёздочки. Его старание похвально, но я от него этого совсем не ждал. Получилось во вред. Повторю, я говорю всё это применительно к винде. Наверное, для юниксов это всё естественно и само собой, но для меня, виндового пользователя, это оказалось совершенно неожиданно. Цитата Это единственный шелл, о котором я неодновретно слышал отрицательные отзывы именно в плане работы с make. Это плохой, негодный шелл. Лучше им просто не пользоваться. Параметры же ему передаются с символом слэш вместо минуса. Какие нарекания? Всё, что он умеет, он прекрасно делает и из-под мейка. Я сейчас именно им и пользуюсь. cmd - это родной шелл для винды. И много чего нельзя сделать иначе чем через него. И в том, что sh не хочет запускать cmd, а вижу признаки заговора линупсоедов:-) А слеш там обратный, чем он мешает sh? Цитата Насколько мне известно, самого наличия "*" в командной строке вполне достаточно чтобы гнутый make звал шелл. А вот это интересно, спасибо, проверю.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 7 2009, 16:58
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(AHTOXA @ Jun 5 2009, 17:06)  Узнаю линупсоеда:-) Виноват может быть кто угодно, только не линупс:-) Вы бы почитали тред повнимательнее, ведь мы с ReAl-ом уже во всём разобрались. Вы обознались. Я линукс не ем, и вообще им не пользуюсь. И даже слова такого тут не произносил.  В том, что программист не прочитал документацию на используемую программу, и не знал, что звезда для шелла имеет специальное значение, виноват уж точно не линукс... А сообщение я отредактировал, удалив то, о чем ReAl и другие уже написали. Там изначально вдвое больше было написано... Если что-то лишнее и осталось - прошу прощения за недосмотр. Цитата(AHTOXA @ Jun 5 2009, 17:06)  Какие нарекания? К сожалению, сейчас уже вряд ли вспомню. Одной из проблем, насколько мне помнится, было очень уж сильное ограничение на длину командной строки. Коллега сталкивался с невозможностью сделать "echo ...список файлов... >listfile". Цитата(AHTOXA @ Jun 5 2009, 17:06)  И много чего нельзя сделать иначе чем через него. И в том, что sh не хочет запускать cmd, а вижу признаки заговора линупсоедов:-) А слеш там обратный, чем он мешает sh? Ой, извините, я уже ничего не понимаю. Просто каша какая-то - все в одну кучу свалено!  Как это "sh не хочет запускать cmd"? Кто вообще спрашивает его желание? Что нормальному шеллу в командной строке указывают, то он и выполняет. При чем тут линуксоеды? Каким боком шеллу мешает обратный слеш? Прошу прощения, но я ничего не могу на это ответить. Я не сталкивался ни с проблемой сделать что-либо без использования cmd, ни с отказом шелла что-либо запускать, ни с помехами от бэкслешей. Впрочем, по поводу использования внутренних команд cmd.exe - вот фрагмент Makefile'а моего коллеги: Код COPY = cmd /C copy
file2.bin: file1.bin $(COPY) file1.bin file2.bin
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Jun 8 2009, 09:04
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(alx2 @ Jun 7 2009, 22:58)  Вы обознались. Я линукс не ем, и вообще им не пользуюсь. И даже слова такого тут не произносил.  Да не суть. Главное, что не виндузоид  Цитата В том, что программист не прочитал документацию на используемую программу, и не знал, что звезда для шелла имеет специальное значение, виноват уж точно не линукс... Хм. Я совершенно не собирался использовать sh, он сам как-то затесался... Цитата К сожалению, сейчас уже вряд ли вспомню. Одной из проблем, насколько мне помнится, было очень уж сильное ограничение на длину командной строки. Коллега сталкивался с невозможностью сделать "echo ...список файлов... >listfile". Это, имхо, очень устаревшие сведения. Цитата Ой, извините, я уже ничего не понимаю. Просто каша какая-то - все в одну кучу свалено!  Как это "sh не хочет запускать cmd"? Кто вообще спрашивает его желание? Что нормальному шеллу в командной строке указывают, то он и выполняет. Вот именно. А этот - самовольничает. В сообщении №13 я привёл пример моей попытки вызова cmd. Цитата При чем тут линуксоеды? Каким боком шеллу мешает обратный слеш? Прошу прощения, но я ничего не могу на это ответить. Я не сталкивался ни с проблемой сделать что-либо без использования cmd, ни с отказом шелла что-либо запускать, ни с помехами от бэкслешей. Это потому, что вы работаете не под виндой. То есть, извините, берётесь судить о том, чего не пробовали. Я уверен, что вы отлично знаете, как устроен sh, но под виндой у него есть некоторые особенности. И именно о них я и веду речь. Цитата Впрочем, по поводу использования внутренних команд cmd.exe - вот фрагмент Makefile'а моего коллеги: Код COPY = cmd /C copy file2.bin: file1.bin $(COPY) file1.bin file2.bin Вашему коллеге повезло, make решил не вызывать sh при выполнении этой команды. У меня такое без sh тоже замечательно работает.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
LessNik GNU make в windows Jun 4 2009, 07:51 _Pasha Цитата(LessNik @ Jun 4 2009, 10:51) Добры... Jun 4 2009, 07:56 LessNik Я до этого скачивал последнюю версию WinAvr, где е... Jun 4 2009, 08:07 Сергей Борщ Цитата(LessNik @ Jun 4 2009, 11:07) Я до ... Jun 4 2009, 09:04 _Pasha Цитата(AHTOXA @ Jun 4 2009, 11:19) А имен... Jun 4 2009, 08:23     xemul Цитата(AHTOXA @ Jun 4 2009, 19:42) Видите... Jun 4 2009, 15:51      AHTOXA Цитата(xemul @ Jun 4 2009, 21:51) Несложн... Jun 4 2009, 16:10       xemul Цитата(AHTOXA @ Jun 4 2009, 20:10) Я это ... Jun 4 2009, 17:17      ReAl Цитата(xemul @ Jun 4 2009, 18:51) Несложн... Jun 4 2009, 17:10       AHTOXA Цитата(ReAl @ Jun 4 2009, 23:10) Проверка... Jun 4 2009, 17:35        ReAl Цитата(AHTOXA @ Jun 4 2009, 20:35) У меня... Jun 4 2009, 19:13         AHTOXA Цитата(ReAl @ Jun 5 2009, 01:13) А ещё не... Jun 4 2009, 20:08          ReAl Цитата(AHTOXA @ Jun 4 2009, 23:08) И как,... Jun 4 2009, 20:43           AHTOXA Спасибо, попробую пооживлять:-) Jun 4 2009, 22:52         alx2 Цитата(AHTOXA @ Jun 8 2009, 14:04) Это, и... Jun 8 2009, 14:44          AHTOXA Цитата(alx2 @ Jun 8 2009, 20:44) AHTOXA, ... Jun 8 2009, 16:04           alx2 Цитата(AHTOXA @ Jun 8 2009, 21:04) Пардон... Jun 9 2009, 18:10            AHTOXA Цитата(alx2 @ Jun 10 2009, 00:10) Это шут... Jun 9 2009, 19:57             alx2 Цитата(AHTOXA @ Jun 10 2009, 00:57) sh - ... Jun 10 2009, 13:47              AHTOXA Цитата(alx2 @ Jun 10 2009, 19:47) Ну тогд... Jun 10 2009, 16:59               ReAl Цитата(AHTOXA @ Jun 10 2009, 19:59) Позво... Jun 10 2009, 17:14                AHTOXA Цитата(ReAl @ Jun 10 2009, 23:14) Не обяз... Jun 10 2009, 18:09                 ReAl Цитата(AHTOXA @ Jun 10 2009, 21:09) То ес... Jun 10 2009, 19:13                  AHTOXA Понятно:-) Поискал среди старых мейков, не нашёл. ... Jun 10 2009, 23:43 LessNik Спасибо всем. Заработало: обновил make и взял стро... Jun 4 2009, 10:38
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|