Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how-to add "warnings as error" rule to Qt .pro file?

When I usually work on a C++ project, one of the first things I do is setting up the "treat warning as errors" on my compiler.

When using Qt, qmake generates the Makefile for you and doesn't include this option on the compilation commands. I'm pretty sure there is a way to add such an option (and others) into the generated Makefile but I couldn't figure it out.

How would I do that ?

I'm using the open-source version of Qt with g++ as the compiler.

like image 990
ereOn Avatar asked Jun 10 '10 13:06

ereOn


2 Answers

There is a QMake variable called QMAKE_CXXFLAGS_WARN_ON which is included into CXXFLAGS whenever CONFIG contains warn_on.

So my project files all include a common.pri which contains:

CONFIG += warn_on

dirty_build: CONFIG += noopt

!dirty_build: WARNINGS += -Werror

# Turn on warnings, except for code that is Qt-generated
WARNINGS += -Wextra
WARNINGS += -Wunknown-pragmas -Wundef
WARNINGS += -Wold-style-cast
WARNINGS += -Wdisabled-optimization -Wstrict-overflow=4
WARNINGS += -Weffc++ -Wuseless-cast
WARNINGS += -Winit-self -Wpointer-arith
WARNINGS += -Wlogical-op
WARNINGS += -Wunsafe-loop-optimizations -Wno-error=unsafe-loop-optimizations
QMAKE_CXXFLAGS_WARN_ON += $(and $(filter-out moc_% qrc_%, $@),$${WARNINGS})

The filter-out exists to disable the warnings for Qt-generated meta-object and resource files.

I also have

# Override the C and C++ targets to selectively replace -I with -isystem for include paths
QMAKE_RUN_CC            = $(CC) -o $obj -c $(CFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $src
QMAKE_RUN_CC_IMP        = $(CC) -o $@ -c $(CFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $<
QMAKE_RUN_CXX           = $(CXX) -o $obj -c $(CXXFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $src
QMAKE_RUN_CXX_IMP       = $(CXX) -o $@ -c $(CXXFLAGS) $(subst -I/usr/include,-isystem /usr/include,$(INCPATH)) $<

That allows me to enable -Weffc++ and others without incurring lots of messages from installed header files.

like image 130
Toby Speight Avatar answered Oct 18 '22 14:10

Toby Speight


The solution above is for GCC only. For both compillers (VS and gcc) use:

win32-g++ {
   QMAKE_CXXFLAGS += -Werror
}
win32-msvc*{
   QMAKE_CXXFLAGS += /WX
}
like image 26
vitperov Avatar answered Oct 18 '22 13:10

vitperov