2015-03-10 4 views
1

Я хочу указать флаг «рассматривать предупреждения как ошибки» для всех файлов, кроме одного. Например, если у меня есть a.cpp, b.cpp и c.cpp, это будет делать это для всех 3:Установите «обрабатывать предупреждения как ошибки» для всех файлов, кроме одного в qmake

SOURCES += a.cpp \ 
    b.cpp \ 
    c.cpp 
QMAKE_CXXFLAGS += /WX 

Но как мне это сделать так, чтобы только a.cpp и b.cpp есть что флаг, но c.cpp нет? Например, я попробовал это (но это не работает):

SOURCES += a.cpp \ 
    b.cpp \ 
    c.cpp 
QMAKE_CXXFLAGS += /WX 
c.cpp: QMAKE_CXXFLAGS -= /WX 

Edit: Я вижу там How to specify separate compilation options for different targets in qmake? и http://permalink.gmane.org/gmane.comp.lib.qt.general/10945. Однако мне нужно указать флаг для определенного файла (наоборот), поэтому я не уверен, что это работает для меня. Также предоставленное решение предназначено для GCC (и я не MSVC).

Edit 2: Можно ли дезактивировать /WX с #pragma внутри самого исходного файла?

+0

Почему бы не исправить поврежденный исходный файл, чтобы он не генерировал никаких предупреждений? – Ferruccio

+0

@Ferruccio Сторонняя библиотека. – sashoalm

+0

Я вижу. Второе изменение дало мне впечатление, что это один из ваших исходных файлов. В конечном итоге вам может быть лучше создавать сторонние библиотеки отдельно, а затем связывать их с вашим проектом. – Ferruccio

ответ

1

Из верхней части моей головы, я думаю, что из двух способов справиться с ситуацией:

  1. Разделите список исходных файлов в нескольких (непересекающихся) списков. Для каждого под-списка исходных файлов компилируйте временную статическую библиотеку со всеми необходимыми флагами компилятора. Затем свяжите свое окончательное приложение/библиотеку со всеми временными статическими библиотеками. Довольно громоздко!

  2. Используйте операторы #pragma, чтобы проинструктировать ваш компилятор игнорировать определенные предупреждения. Они зависят от вашего компилятора. Для GCC см

    1. https://stackoverflow.com/a/3394268
    2. https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

    и для компилятора Microsoft это может быть хорошим началом:

    1. https://msdn.microsoft.com/en-us/library/2c8f766e.aspx
+0

Спасибо, я закончил отключать предупреждения с помощью '# прагмы'. Я отправил ответ, подробно изложив его. – sashoalm

0

Не похоже, что это хорошее решение. Вот что я сделал в конце:

Я положил QMAKE_CXXFLAGS += /WX в .pro-файл, а затем положил #pragma warning(push, 0) в начало каждого .cpp-файла, который я хотел исключить.

Это не отключает флаг «рассматривать предупреждения как ошибки», он просто отключает предупреждения, но поскольку обычно мы хотим исключить сторонний код, это достаточно хорошее решение.