gcc подтверждает параметр -Wfatal-errors, но не воздействует на него
Используя параметр, после каждой ошибки gcc печатает "компиляция прекращена из-за -Wfatal-errors".
Но это продолжается. На самом деле не останавливается.
Я использую:
g++ (x86_64-win32-seh-rev1, Built by MinGW-W64 project) 4.9.2
Вызов компилятора:
@echo off
set LIBRARY_PATH=D:\Projekte\C++\Arsenal of Democracy\sdk\Lib;C:\Program Files (x86)\Microsoft DirectX SDK (August 2008)\Lib\x86
set CPLUS_INCLUDE_PATH=D:\Projekte\C++\Arsenal of Democracy\sdk\Include;C:\Program Files (x86)\Microsoft DirectX SDK (August 2008)\Include
cd src
g++ -m32 -mwindows -w -Wfatal-errors -std=c++14 -o ../AODGame.exe *.cpp
cd ..
Время компиляции примерно такое же, как и без параметра. Количество ошибок также одинаково.
Однако, если я построю минимальный пример:
int main()
{
cout << "Bla." << endl; // 1st error - should abort here
t - q = v; // 2nd error - should not reach nor report
}
и скомпилировать это с
g++ -Wfatal-errors -o Test Test.cpp
Тогда это работает, и вторая ошибка никогда не появляется (и это происходит без параметра).
Что может быть причиной этого нарушения? Как я могу обойти это?
Очевидно, меня не волнует, будет ли прервана компиляция крошечного примера или нет, но в реальном проекте сэкономленное время - или, скорее, будет - действительно ценно.
Я искал эту проблему и нашел только ~ два года темы о разных проблемах с одним и тем же параметром (не работает на Clang, не включен в gcc 3.x и т. Д.), Ни одна из которых, кажется, здесь не применима.
-
Чтобы следовать комментарию @David Macek, минимальный пример с тем же типом первой ошибки
#include <vector>
using namespace std;
template<class X> void test(vector<X> & v)
{
vector<X>::iterator i = v.begin();
}
int main()
{
t - v = q;
}
Он также корректно завершается после самой первой ошибки и никогда не достигает выражения в main.