QT make 在构建时有很大的输出

Posted

技术标签:

【中文标题】QT make 在构建时有很大的输出【英文标题】:QT make has large output on build 【发布时间】:2017-10-28 00:56:02 【问题描述】:

我正在编译一个 QT 项目。我运行了 qmake 和 make 进行编译。

每次编译一个 cpp 都会有大约 20 行详细的输出。

当我只更改一行并进行时,该更改将输出 20 行。

这个输出到底是什么,有没有办法限制它?

以下输出来自更改单行并编译该单个 cpp。

g++ -c -g -Wextra -std=c++0x -DGLOGG_DATE=\"`date +"%F"`\" -DGLOGG_VERSION=\"`git describe`\" -DGLOGG_COMMIT=\"`git rev-parse --short HEAD`\" -DGLOGG_SUPPORTS_INOTIFY -O2 -Wall -W -D_REENTRANT -fPIC -DFILELOG_MAX_LEVEL="logDEBUG" -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -Isrc -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I.moc/release-shared -I.ui/release-shared -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o .obj/release-shared/filterset.o src/filterset.cpp
g++ -m64 -Wl,-O1 -o release/glogg .obj/release-shared/main.o .obj/release-shared/session.o .obj/release-shared/abstractlogdata.o .obj/release-shared/logdata.o .obj/release-shared/logfiltereddata.o .obj/release-shared/logfiltereddataworkerthread.o .obj/release-shared/logdataworkerthread.o .obj/release-shared/compressedlinestorage.o .obj/release-shared/mainwindow.o .obj/release-shared/crawlerwidget.o .obj/release-shared/abstractlogview.o .obj/release-shared/logmainview.o .obj/release-shared/filteredview.o .obj/release-shared/optionsdialog.o .obj/release-shared/persistentinfo.o .obj/release-shared/configuration.o .obj/release-shared/filtersdialog.o .obj/release-shared/filterset.o .obj/release-shared/savedsearches.o .obj/release-shared/infoline.o .obj/release-shared/menuactiontooltipbehavior.o .obj/release-shared/selection.o .obj/release-shared/quickfind.o .obj/release-shared/quickfindpattern.o .obj/release-shared/quickfindwidget.o .obj/release-shared/sessioninfo.o .obj/release-shared/recentfiles.o .obj/release-shared/overview.o .obj/release-shared/overviewwidget.o .obj/release-shared/marks.o .obj/release-shared/quickfindmux.o .obj/release-shared/signalmux.o .obj/release-shared/tabbedcrawlerwidget.o .obj/release-shared/viewtools.o .obj/release-shared/encodingspeculator.o .obj/release-shared/gloggapp.o .obj/release-shared/platformfilewatcher.o .obj/release-shared/inotifywatchtowerdriver.o .obj/release-shared/watchtower.o .obj/release-shared/watchtowerlist.o .obj/release-shared/qrc_glogg.o .obj/release-shared/moc_abstractlogdata.o .obj/release-shared/moc_logdata.o .obj/release-shared/moc_logfiltereddata.o .obj/release-shared/moc_logfiltereddataworkerthread.o .obj/release-shared/moc_logdataworkerthread.o .obj/release-shared/moc_mainwindow.o .obj/release-shared/moc_crawlerwidget.o .obj/release-shared/moc_abstractlogview.o .obj/release-shared/moc_optionsdialog.o .obj/release-shared/moc_filtersdialog.o .obj/release-shared/moc_filewatcher.o .obj/release-shared/moc_quickfind.o .obj/release-shared/moc_quickfindpattern.o .obj/release-shared/moc_quickfindwidget.o .obj/release-shared/moc_menuactiontooltipbehavior.o .obj/release-shared/moc_overviewwidget.o .obj/release-shared/moc_quickfindmux.o .obj/release-shared/moc_tabbedcrawlerwidget.o .obj/release-shared/moc_externalcom.o .obj/release-shared/moc_viewtools.o .obj/release-shared/moc_gloggapp.o .obj/release-shared/moc_platformfilewatcher.o   -L/usr/X11R6/lib64 -lboost_program_options -lQt5Widgets -lQt5Gui -lQt5Network -lQt5Core -lGL -lpthread 

【问题讨论】:

【参考方案1】:

运行make 时的输出是编译项目时执行的命令。

如果您想删除这些输出,您可以在 .pro 文件中或在调用 qmake 时使用 CONFIG+=silent

qmake CONFIG+=silent myproject.pro
make

这样做会产生更短的输出,例如

compiling file1.cpp 
compiling file2.cpp
linking app.exe

详细地说,当您更改 cpp 文件时,您应该会在输出中看到 2 行。一个用于将您的 cpp 文件编译为目标文件的命令,另一个用于将新目标文件(以及未更改的目标文件)链接到新可执行文件的命令。这正是您粘贴的输出。如果您删除所有选项,您最终会得到:

g++ -c -o .obj/release-shared/filterset.o src/filterset.cpp
g++ -o release/glogg <list of object files>

您可以将其视为更多行,因为您使用的控制台会在很多行上换行太长的行。

另外,如果您编辑 .h 文件,通常需要重新编译更多文件,因为所有直接或间接包含已更改 .h 文件的 cpp 文件都必须重新编译。由于您使用的是 Qt,如果您更改 QObject 派生类的 .h 文件,您将执行 2 个额外的命令:一个用于生成 moc.cpp 文件,另一个用于编译 moc.cpp 文件。

【讨论】:

以上是关于QT make 在构建时有很大的输出的主要内容,如果未能解决你的问题,请参考以下文章

“无法确定要运行哪个“make”命令。检查构建配置中的“make”步骤。” Qt 创建者

PyQt 静态构建在 make 时失败

体验构建和使用 Qt Embedded

如何更改 Qt Creator 构建工具?

Groovy构建工具 ( 构建工具引入 | Gradle 构建工具作用 | 传统的依赖管理 )

在 Ubuntu for Windows 上构建 QT5 项目