Qt构建系统不尊重CFLAGS和CXXFLAGS

问题描述 投票:1回答:1

我正在尝试调试QKeyEvent问题。当我将代码放在调试器下时,我注意到变量已被优化。我无法检查缺少的值。

我的PRO文件专门将CFLAGSCXXFLAGS设置为-g3 -O0

$ cat callboot.pro 
TEMPLATE = app
TARGET = callboot-ui.exe

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets uitools

HEADERS += main_dlg.h keyboard_dlg.h lists_dlg.h numpad_dlg.h \
           settings_dlg.h phone_dlg.h name_dlg.h address_dlg.h \
           whitelist_dlg.h blacklist_dlg.h wifi_dlg.h

SOURCES += main_dlg.cpp keyboard_dlg.cpp lists_dlg.cpp numpad_dlg.cpp \
           settings_dlg.cpp phone_dlg.cpp name_dlg.cpp address_dlg.cpp \
           whitelist_dlg.cpp blacklist_dlg.cpp wifi_dlg.cpp \
           main.cpp

FORMS   += main_dlg.ui keyboard_dlg.ui lists_dlg.ui numpad_dlg.ui \
           settings_dlg.ui phone_dlg.ui name_dlg.ui address_dlg.ui \
           whitelist_dlg.ui blacklist_dlg.ui wifi_dlg.ui

CFLAGS += -g3 -O0
CXXFLAGS += -g3 -O0

QMAKE_CFLAGS += -g3 -O0
QMAKE_CXXFLAGS += -g3 -O0

但是,当我执行qmake && make

g++ -c -pipe -g3 -O0 -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_UITOOLS_
LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -isystem /usr/include/x86_64
-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtUiTools -isystem /us
r/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/
qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -isystem /usr/in
clude/libdrm -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o moc_keyboa
rd_dlg.o moc_keyboard_dlg.cpp

注意Qt构建系统踩到了我的标志。

我不需要另一个构建系统,而不必理会我的标志。我从CMake中得到了足够的信息。

我如何强制Qt构建系统遵守我的要求?


这是我要执行的代码:

void KeyboardDlg::on_button_11_clicked()
{
    QChar ch = SelectAlphabet(index)[0];
    QKeySequence seq = QKeySequence(ch);
    Qt::Key key = toKey(seq);
    QKeyEvent press(QEvent::KeyPress, toKey(seq), Qt::NoModifier);
    QApplication::sendEvent(ui->textEdit, &press);
}

由于Qt在我的标志上踩到脚,这是典型的调试会话:

$ gdb callboot-ui.exe 
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
...
Reading symbols from callboot-ui.exe...done.
(gdb) b keyboard_dlg.cpp:202
Breakpoint 1 at 0xccf0: file keyboard_dlg.cpp, line 202.
(gdb) r
Starting program: /home/jwalton/callboot/qt-ui/callboot-ui.exe 
...
Thread 1 "callboot-ui.exe" hit Breakpoint 1, KeyboardDlg::on_button_11_clicked
    (this=0x7fffffffdde0) at keyboard_dlg.cpp:202
202     QChar ch = SelectAlphabet(index)[0];
(gdb) n
205     QKeySequence seq = QKeySequence(ch);
(gdb) p ch
$1 = <optimized out>
(gdb) n
206     Qt::Key key = toKey(seq);
(gdb) n
207     QKeyEvent press(QEvent::KeyPress, toKey(seq), Qt::NoModifier);
(gdb) p key
$2 = <optimized out>
qt makefile cflags
1个回答
0
投票

使用QtCreator,无论何时执行发行版本,都将添加O2标志。手动编辑pro文件应该产生相同的结果,只需添加

CONFIG += debug

或只是打电话

qmake CONFIG+=debug && make
© www.soinside.com 2019 - 2024. All rights reserved.