реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Closed TopicStart new topic
> не работает рекурсивный вызов make, make -C $dir
AHTOXA
сообщение Apr 2 2008, 19:25
Сообщение #16


фанат дивана
******

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



Проверил со сборкой от klen-а, работает нормально:
Код
>make
for subdir in  ./a ./b; do echo "===== building $subdir ====="; \
        make -C $subdir all; done
===== building ./a =====
make[1]: Entering directory `D:/tmp/borsh/a'
echo AAAAAAAAAAAAAAAAAAAAAA
process_begin: CreateProcess(NULL, echo AAAAAAAAAAAAAAAAAAAAAA, ...) failed.
make (e=2): ═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы.
make[1]: *** [all] Error 2
make[1]: Leaving directory `D:/tmp/borsh/a'
===== building ./b =====
make[1]: Entering directory `D:/tmp/borsh/b'
echo BBBBBBBBBBBBBBBBBBBBBBBBBB
process_begin: CreateProcess(NULL, echo BBBBBBBBBBBBBBBBBBBBBBBBBB, ...) failed.
make (e=2): ═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы.
make[1]: *** [all] Error 2
make[1]: Leaving directory `D:/tmp/borsh/b'
make: *** [all] Error 2


Только echo виндовое он не умеет вызывать, а echo.exe в сборке отсутствовало. Причём make там тоже отсутствовал, его я взял из winavr:-) Так что всё дело похоже в sh из winavr (не зря я его всё время сразу выбрасываю:-))


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 2 2008, 19:53
Сообщение #17


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Сергей Борщ @ Apr 2 2008, 21:23) *
Код
mkdir -p ./a/b ./a/c

Вручную:
Код
>mkdir -p ./s/d ./f/g
Ошибка в синтаксисе команды.
>mkdir --version
>mkdir /?
Создание каталога.

MKDIR [диск:]путь
MD [диск:]путь
...
...

Это был mkdir от command.com и даже если звать mkdir.exe то всё равно вызывается он.

Код
>c:\msys\1.0\bin\mkdir -p ./s/d ./p/q
>tree /a .
Структура папок тома TEMP
Серийный номер тома: 28DC-7502
F:\TEMP\Q
+---p
|   \---q
\---s
    \---d
>c:\msys\1.0\bin\mkdir --version
mkdir (fileutils) 4.1
Written by David MacKenzie.

Copyright (C) 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
Нормально всё...

"Становится всё чудесатее и чудесатее".

Да, в makefile одиночные команды make имеет право выполнять, напрямую вызывая команду через system() - кто реально при этом будет вызван - path его знает.
Я с каких-то пор форсирую вызов sh.exe для выполнения чего угодно методом группирования команд через ';' - make обязан позвать shell для выполнения "скрипта". Если команда одна - всегда можно сделать две smile.gif
Код
foo:
    echo "==== making foo ========"; реальная_команда


С общей частью пути тоже нормально
Код
>c:\msys\1.0\bin\mkdir -p ./s/d ./s/q
>tree /a .
Структура папок тома TEMP
Серийный номер тома: 28DC-7502
F:\TEMP\Q
\---s
    +---d
    \---q
>


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 2 2008, 20:14
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ReAl @ Apr 2 2008, 22:53) *
Код
>c:\msys\1.0\bin\mkdir --version
mkdir (fileutils) 4.1
Written by David MacKenzie.
Нормально всё...
Да, этот mkdir из WinAVR работает правильно. Неправильно (или таки я что-то не понимаю?) работает mkdir из msys. Причем я его уже просто из командной строки вызываю.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 2 2008, 19:26
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Сергей Борщ @ Apr 2 2008, 15:14) *
Выяснил такую закономерность:

make.exe, sh.exe, msys-1.0.dll лежат в одной папке - работает неправильно.
make.exe + msys-1.0.dll лежат в одной папке, sh.exe в другой - работает неправильно.

make.exe лежит в одной папке, sh.exe + msys-1.0.dll в другой - все работает.
make.exe в одной папке, sh.exe в другой, msys-1.0.dll в третьей - все работает.
Проблема решена окончательно заменой msys-1.0.dll из комплекта WinAVR на свежую из комплекта msys: MSYS-1.0.11-20080821-dll.tar.gz. Точнее, она давно решилась отказом от утилит из комплекта WinAVR в пользу свежих версий из msys, но сегодня решил проверить на всякий случай - действительно, замена msys-1.0.dll лечит описанный баг и в WinAVRовых.
тот же mkdir 5.97 в свежем msys тоже работает. Видимо все проблемы были в dll


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th August 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016