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

 
 
> gnu make, make.exe: *** No rule to make target...
demiurg_spb
сообщение Dec 7 2008, 12:00
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Я думаю, что это может заинтересовать многих.
Очень часто в больших проектах содержится множество исходных файлов.
И если в списке SRC указан файл, отсутствующий в путях проекта, выскакивает лишь сообщение:
Цитата
make.exe: *** No rule to make target...
Вопрос: как организовать вывод более внятного сообщения с указанием имени ненайденного файла?
Я так понимаю, что надо до сборки прописать правило в котором происходит проверка доступа к каждому файлу из SRC списка.
А как это сделать?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Dec 7 2008, 16:13
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Правим makefile от MFile из WinAVR:
Код
# Define programs and commands.
CHECKEXIST = fexist

# Default target.
all: begin checkfiles gccversion sizebefore build sizeafter end

# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
checkfiles:
    @$(CHECKEXIST) $(SRC)

begin:
    @echo
    @echo $(MSG_BEGIN)

end:
    @echo $(MSG_END)
    @echo


Софтина fexist.exe (положить туда куда есть ссылки в %PATH%):
Код
#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp;

    for(int i = 1; i < argc; i++)
    {
        fp = fopen(argv[i], "r");
        if(fp == NULL)
        {
            printf("File not found: %s\r\n", argv[i]);

            return 1;
        }
        else fclose(fp);
    }

    return 0;
}


Имеем (запускают из pn2):
Цитата
> "make.exe" all

-------- begin --------
File not found: keyboard1.c

make.exe: *** [checkfiles] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Такое вот решение rolleyes.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 7 2008, 17:01
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(SysRq @ Dec 7 2008, 19:13) *
Такое вот решение rolleyes.gif
Так слишком ВЛОБ и нестандартноsmile.gif
Надо чтоб и под win и под nix одинаково шло.
Наверняка должна быть какя-нибудь bash/sh утилта.
Юниксойды АУ!:)
Я тут порылся немного и нашёл в WinAVR\utils\bin\test.exe
Судя по test.exe --help может подойти:
test.exe -e filename
Или touch.exe может подойти.
Одним словом, нужна помощ профессионалов...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
SysRq
сообщение Dec 7 2008, 18:27
Сообщение #4


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(demiurg_spb @ Dec 7 2008, 20:01) *
Наверняка должна быть какя-нибудь bash/sh утилта.
Логично...

Код
checkfiles:
    @for srcfile in $(SRC); do if test ! -e $$srcfile; then echo File not found: $$srcfile; echo; fi; done
Цитата
> "make.exe" all

-------- begin --------
File not found: keyboard1.c

avr-gcc (WinAVR 20080610) 4.3.0
Copyright © 2008 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.

make.exe: *** No rule to make target `main.elf', needed by `elf'. Stop.

> Process Exit Code: 2
> Time Taken: 00:01


Сообщение отредактировал SysRq - Dec 7 2008, 18:31
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 7 2008, 18:36
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Во! Это уже очень хорошо. Спасибо!
Но для полноценного использования необходимо чтобы поиск происходил и во всех "остальных" путях указаннвх в:
VPATH := $(SOURCE_DIRS), а то это неприменимо к проектам распределённым по директориям, коих большинство...
И ещё один вопрос (для большей лучшести).
Как сделать, чтобы при нахождении отсутствующего файла сразу прекращалось
выполнение сценария makefile (а не выводилась версия gcc и остальное).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- demiurg_spb   gnu make   Dec 7 2008, 12:00
- - SysRq   Разве? Тут скорее makefile вообще отсутствует, или...   Dec 7 2008, 14:18
|- - demiurg_spb   Я ещё раз проверил: КодSRC = SRC += main.c .... SR...   Dec 7 2008, 15:15
- - SysRq   Мнэээ.. ну, если там примерно так задается: КодSOU...   Dec 7 2008, 22:02
|- - demiurg_spb   Можно раскидать всё по каталогам и не боятся что к...   Dec 7 2008, 23:47
|- - SysRq   Насчет разделения мусора и исходников мысль отличн...   Dec 8 2008, 00:27
- - axle   Мне кажется надо делать так: КодSRC = file1.c file...   Dec 8 2008, 10:14
|- - demiurg_spb   Код$(SRC): @echo File not found...   Dec 8 2008, 10:32
||- - demiurg_spb   Сообщение: "makefile:439: *** Missing separat...   Dec 10 2008, 15:32
|- - SysRq   Цитата(axle @ Dec 8 2008, 13:14) Мне каже...   Dec 8 2008, 10:52
- - ReAl   Оно, конечно, оффтопик, но я давно пошёл другим пу...   Dec 11 2008, 08:26


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 06:39
Рейтинг@Mail.ru


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