到目前为止,我一直坚持以下程序: - 在项目上调用qmake - 致电制作
但是看看Qt Creator为特定项目(QML插件)发出的命令,我发现了另一个程序:
在发布完整代码之前总结一下,对于一个包含2个头文件和2个cpp文件的项目,我得到2个调用g ++,然后调用moc,另一个g ++,另一个moc,最后再调用2个g ++,总共7个电话,5到g ++和2到moc。
也许有人能够善意地向我解释为什么需要这么多电话,特别是每个人都做了什么?当然,我确实有一些想法,我看到两次调用moc和两个用户类,但我仍然不了解所有调用的原因以及他们特定顺序的原因。
这是完整的代码(格式化使其更具可读性):
arm-linux-androideabi-g++
-c
-Wno-psabi
-march=armv7-a
-mfloat-abi=softfp
-mfpu=vfp
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-DANDROID
-Wa,--noexecstack
-std=gnu++0x
-O2
-mthumb
-Os
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-D_REENTRANT
-Wall
-Wno-psabi
-W
-fPIC
-DQT_NO_DEBUG
-DQT_PLUGIN
-DQT_QUICK_LIB
-DQT_QML_LIB
-DQT_NETWORK_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\mkspecs\android-g++
-I..\plugin
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQuick
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQml
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtNetwork
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtGui
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtCore
-I.
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include
-I..\..\..\Android\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
-I.
-o plugin_plugin.obj ..\plugin\plugin_plugin.cpp
______________________________________________
arm-linux-androideabi-g++
-c
-Wno-psabi
-march=armv7-a
-mfloat-abi=softfp
-mfpu=vfp
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-DANDROID
-Wa,--noexecstack
-std=gnu++0x
-O2
-mthumb
-Os
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-D_REENTRANT
-Wall
-Wno-psabi
-W
-fPIC
-DQT_NO_DEBUG
-DQT_PLUGIN
-DQT_QUICK_LIB
-DQT_QML_LIB
-DQT_NETWORK_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\mkspecs\android-g++
-I..\plugin
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQuick
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQml
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtNetwork
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtGui
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtCore
-I.
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include
-I..\..\..\Android\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
-I.
-o myitem.obj
..\plugin\myitem.cpp
______________________________________________
moc.exe
-DQT_NO_DEBUG
-DQT_PLUGIN
-DQT_QUICK_LIB
-DQT_QML_LIB
-DQT_NETWORK_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\mkspecs\android-g++
-I..\plugin -IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQuick
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQml
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtNetwork
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtGui
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtCore
-I.
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include
-I..\..\..\Android\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
-I.
-I/usr/include -I/usr/local/include
..\plugin\plugin_plugin.h -o moc_plugin_plugin.cpp
______________________________________________
arm-linux-androideabi-g++
-c
-Wno-psabi
-march=armv7-a
-mfloat-abi=softfp
-mfpu=vfp
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-DANDROID
-Wa,--noexecstack
-std=gnu++0x
-O2
-mthumb
-Os
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-D_REENTRANT
-Wall
-Wno-psabi
-W
-fPIC
-DQT_NO_DEBUG
-DQT_PLUGIN
-DQT_QUICK_LIB
-DQT_QML_LIB
-DQT_NETWORK_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\mkspecs\android-g++
-I..\plugin
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQuick
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQml
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtNetwork
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtGui
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtCore
-I.
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include
-I..\..\..\Android\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
-I.
-o moc_plugin_plugin.obj
moc_plugin_plugin.cpp
______________________________________________
moc.exe
-DQT_NO_DEBUG
-DQT_PLUGIN
-DQT_QUICK_LIB
-DQT_QML_LIB
-DQT_NETWORK_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\mkspecs\android-g++
-I..\plugin -IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQuick
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQml
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtNetwork
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtGui
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtCore
-I.
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include
-I..\..\..\Android\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
-I. -I/usr/include -I/usr/local/include ..\plugin\myitem.h -o moc_myitem.cpp
______________________________________________
arm-linux-androideabi-g++
-c
-Wno-psabi
-march=armv7-a
-mfloat-abi=softfp
-mfpu=vfp
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-DANDROID
-Wa,--noexecstack
-std=gnu++0x
-O2
-mthumb
-Os
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-D_REENTRANT
-Wall
-Wno-psabi
-W
-fPIC
-DQT_NO_DEBUG
-DQT_PLUGIN
-DQT_QUICK_LIB
-DQT_QML_LIB
-DQT_NETWORK_LIB
-DQT_GUI_LIB
-DQT_CORE_LIB
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\mkspecs\android-g++
-I..\plugin -IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQuick
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtQml
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtNetwork
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtGui
-IC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\include\QtCore
-I.
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\include
-I..\..\..\Android\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include
-I..\..\..\Android\android-ndk-r9d\platforms\android-19\arch-arm\usr\include
-I. -o moc_myitem.obj
moc_myitem.cpp
del libplugin.so
______________________________________________
arm-linux-androideabi-g++
--sysroot=D:\Android\android-ndk-r9d/platforms/android-19/arch-arm/
-Wl,--no-undefined
-Wl,-z,noexecstack
-shared
-o
libplugin.so
plugin_plugin.obj
myitem.obj
moc_plugin_plugin.obj
moc_myitem.obj
-LD:\Android\android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a
-LD:\Android\android-ndk-r9d/platforms/android-19/arch-arm//usr/lib
-LC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7\lib -lQt5Quick
-Lc:\Utils\android\ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a
-Lc:\Utils\android\ndk/platforms/android-9/arch-arm//usr/lib
-LC:\Utils\icu32_51_1_mingw48\lib -LC:\utils\postgresql\pgsql\lib
-LC:\utils\mysql\mysql\lib -LC:\Utils\pgsql\lib
-LC:\temp\opensll-android-master\openssl-android-master\lib
-LC:\Qt\Qt5.2.1_Android\5.2.1\android_armv7/lib
-lQt5Qml
-lQt5Network
-lQt5Gui
-lQt5Core
-lGLESv2
-lgnustl_shared
-llog
-lz
-lm
-ldl
-lc
-lgcc
答案 0 :(得分:2)
简而言之,您可以针对各种输入和输出运行三个不同的进程。这些是:
编译器将源代码编译成目标文件。
元对象编译器生成源代码。
链接器将所有目标文件链接到一个二进制文件中,在本例中为共享库。
第一个使用g ++从插件源代码中创建了一个目标文件。
arm-linux-androideabi-g++ ... -o plugin_plugin.obj ..\plugin\plugin_plugin.cpp
第二个使用g ++从myitem.cpp源代码创建了一个目标文件。
arm-linux-androideabi-g++ ... -o myitem.obj ..\plugin\myitem.cpp
第三个使用moc为您的插件生成了必要的moc文件。
moc.exe ... ..\plugin\plugin_plugin.h -o moc_plugin_plugin.cpp
第四个使用g ++为以前生成的moc源代码创建了对象。
arm-linux-androideabi-g++ ... -o moc_plugin_plugin.obj moc_plugin_plugin.cpp
第五个使用moc.exe生成myitem.cpp源代码的moc源代码。
arm-linux-androideabi-g++ ... ..\plugin\myitem.h -o moc_myitem.cpp
第六个使用g ++为之前创建的moc文件创建了目标文件。
arm-linux-androideabi-g++ ... -o moc_myitem.obj moc_myitem.cpp
第七步也是最后一步使用g ++连接前面步骤中创建的目标文件:
arm-linux-androideabi-g++ ... -shared -o libplugin.so plugin_plugin.obj myitem.obj
moc_plugin_plugin.obj moc_myitem.obj
这些是处理不同输入和输出文件的所有不同步骤,然后文件链接发生在所有这些步骤上。这就是你运行这些命令的原因。