mingw32-make игнорирует ошибки (простите за оффтоп)

nrmBeginner
Дата: 20.04.2015 03:15:36
mingw32-make стал игнорировать ошибки при сборке, пытается выполнить цели до конца, после чего даже и %errorlevel% нулю равен. При чем так себя ведут mingw32-make из всех версий MinGW какие бы я не пробовал на своей машине. Wtf, как побороть?
Dimitry Sibiryakov
Дата: 20.04.2015 10:58:48

Проверь ключи запуска на предмет отсутствия -i, -k и сам makefile на .IGNORE

Posted via ActualForum NNTP Server 1.5

nrmBeginner
Дата: 20.04.2015 11:46:12
Dimitry Sibiryakov,

make я запускаю самостоятельно, а переменных среды лишних не установлено.
Makefilы самодельные, но и в несамодельных .IGNORE отсутствует.
White Owl
Дата: 20.04.2015 18:38:58
То есть у тебя есть код типа:
//q.cpp
#include <garbage>

void main() {
   some other garbage;
}


#makefile
q.o: q.cpp
    g++ -c -o $@ $<

q.exe: q.o
    g++ -o $@ $^

ты запускаешь make и получаешь q.exe?
nrmBeginner
Дата: 20.04.2015 19:43:00
White Owl,

Конечно нет, непосредственно сборкой то компилятор (линковщик) занимается, он то здоров.

mingw32-make будет пытаться выполнять правила в порядке рекурсивного прохождения по зависимостям главной цели.

Следующее произойдет если только в вашем Makefile q.exe: поместить вначале что бы цель стала приоритетной, а то иначе, конечно, выполнение остановится после q.o: :

после неудачи с q.o: mingw32-make не завершит работу, а зачем то перейдет к q.exe: и будет пытаться обработать правило. И в конечном итоге когда, естественно, ничего не получется, он победоносно положит значение 0 в %errorlevel%.
White Owl
Дата: 20.04.2015 22:05:07
nrmBeginner
после неудачи с q.o: mingw32-make не завершит работу, а зачем то перейдет к q.exe: и будет пытаться обработать правило. И в конечном итоге когда, естественно, ничего не получется, он победоносно положит значение 0 в %errorlevel%.

Возьми мой пример, запусти `make -p q.exe` и покажи вывод.
White Owl
Дата: 20.04.2015 22:07:21
Или
mingw32-make -p q.exe > log.txt
если ты не делал себе линк для make.
nrmBeginner
Дата: 20.04.2015 23:01:34
White Owl,

Вывод достаточно объемный, я решил выложить через файл.
White Owl
Дата: 21.04.2015 00:13:59
Ну... из странного, я вижу MAKE_COMMAND. 188-ая строка.
Там должен был быть полный путь и имя make'а. А у тебя только имя файла, да еще и без расширения... Должно быть в духе:
MAKE_COMMAND := C:/MinGW/bin/mingw32-make.EXE
Проверь что именно у тебя запускается в качестве make'а.


Еще, у тебя make версии 4.0.90. А я предпочту пожить на 3.82 еще пору-тройку лет :) А то мало-ли какие странные баги в четвертой ветви появятся.

Для очистки совести попробуй сделать bat:
g++ -c -o q.o q.cpp
echo %errorlevel%
nrmBeginner
Дата: 21.04.2015 00:38:42
White Owl,

Опа, вот оно! g++ -c -o q.o q.cpp при провале возвращает в errorlevel 0. У меня три разных сборки mingw и все повторяют одно и то же поведение. И еще, я и раньше это заметил, но почему-то не придал этому значения - когда g++ не может скомпилировать код он все равно создает объектный файл (q.o). Раньше такого никогда не видел.