QtCreator:Linux 64からLinux 32、win32、win64、Mac OS XへのQtクロスコンパイル。 upx、usb、dmgなど





Qtライブラリを使用すると、真のクロスプラットフォームアプリケーションを作成できます。 作成したコードは、多くのオペレーティングシステム用にコンパイルできます。 しかし、問題はまさに「コンパイル」という言葉にあります。 ターゲットシステムの下で再起動し、カスタマイズされた開発環境をインストールし、その中にライブラリー動物園を設定する必要があることが理解されています。 クロスコンパイルの保存-実行されるプラットフォーム以外のプラットフォーム用の実行可能コードを生成するコンパイル。



Windows 64のクロスコンパイル


通常、最も要求される問題の1つは、最初にLinux用に開発されたアプリケーションのWindowsバージョンの構築です。 この問題の解決例は、 ここまたはロシア語で見ることができます。 mkspecs構成を作成し、適切なディレクトリにQtファイルを配置する必要があります。 この場合、Qtをコンパイルする必要はありません;公式サイトからバイナリをダウンロードできます。

このアプローチにはいくつかの欠点があります。1)QtCreatorはこの方法でインストールされたライブラリについて何も知りません。 2)Windows x64用の公式Qtビルドはありません。 そして、まだ最初の問題とどうにかして戦うことができれば、コンパイルだけが2番目の問題に役立ちます...



クロスコンパイルする前に、クロスコンパイラ自体を直接配置することを忘れないでください(「mingw」という名前のパッケージマネージャーで検索されます)。 そして、公式サイトからqt-everywhereソースをダウンロードします。 解凍されたアーカイブのmkspecsディレクトリで、 win32-g ++フォルダーをwin64-x-g ++にコピーし、 qmake.confファイルの内容を調整します。 私は次のものを手に入れました:

非表示のテキスト
# # qmake configuration for win64-x-g++ # # Written for MinGW # # Cross compile example for i686-w64-mingw32-g++: # configure -xplatform win32-g++ -device-option CROSS_COMPILE=i686-w64-mingw32- # MAKEFILE_GENERATOR = MINGW load(device_config) equals(QMAKE_HOST.os, Windows): EXE_SUFFIX = .exe TEMPLATE = app CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header QT += core gui DEFINES += UNICODE #QT_LARGEFILE_SUPPORT QMAKE_COMPILER_DEFINES += __GNUC__ WIN WIN32 WIN64 QMAKE_EXT_OBJ = .o QMAKE_EXT_RES = _res.o QMAKE_CC = $${CROSS_COMPILE}gcc QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -pipe -m64 QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall -Wextra QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 QMAKE_CFLAGS_DEBUG = -g QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CXX = $${CROSS_COMPILE}g++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD QMAKE_CXXFLAGS_RTTI_ON = -frtti QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions QMAKE_INCDIR = /usr/x86_64-w64-mingw32/include QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< QMAKE_LINK = $${CROSS_COMPILE}g++ QMAKE_LINK_C = $${CROSS_COMPILE}gcc #QMAKE_LFLAGS = -m64 QMAKE_LFLAGS = -m64 -mthreads -static-libgcc -static -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads QMAKE_LFLAGS_EXCEPTIONS_OFF = QMAKE_LFLAGS_RELEASE = -Wl,-s QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows QMAKE_LFLAGS_DLL = -shared QMAKE_LINK_OBJECT_MAX = 10 QMAKE_LINK_OBJECT_SCRIPT= object_script QMAKE_PREFIX_STATICLIB = lib QMAKE_EXTENSION_STATICLIB = a QMAKE_LIBS = QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 QMAKE_LIBS_NETWORK = -lws2_32 QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32 QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32 QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain !isEmpty(QMAKE_SH) { MINGW_IN_SHELL = 1 QMAKE_DIR_SEP = / QMAKE_QMAKE ~= s,\\\\,/, QMAKE_COPY = cp QMAKE_COPY_DIR = cp -r QMAKE_MOVE = mv QMAKE_DEL_FILE = rm QMAKE_MKDIR = mkdir -p QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = test -d } else { QMAKE_COPY = copy /y QMAKE_COPY_DIR = xcopy /s /q /y /i QMAKE_MOVE = move QMAKE_DEL_FILE = del QMAKE_MKDIR = mkdir QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = if not exist } QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc$${EXE_SUFFIX} QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic$${EXE_SUFFIX} QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc$${EXE_SUFFIX} QMAKE_IDL = midl QMAKE_LIB = $${CROSS_COMPILE}ar -ru QMAKE_RC = $${CROSS_COMPILE}windres QMAKE_ZIP = zip -r -9 QMAKE_STRIP = $${CROSS_COMPILE}strip QMAKE_STRIPFLAGS_LIB += --strip-unneeded load(qt_config)
      
      





実際、仕様ファイルではパスのみが置き換えられました。



次のパラメーターを使用してconfigureを実行しました。

./configure -xplatform win64-x-g++ CROSS_COMPILE=x86_64-w64-mingw32- -prefix /usr/local/qt4win64 -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools -no-multimedia -no-qt3support -fast -nomake demos -nomake examples -nomake tools -device-option -little-endian -qt-zlib -qt-libpng -qt-libjpeg -openssl-linked -no-fontconfig -no-3dnow -no-ssse3 -continue





ここでは、Webkit、フォノン、マルチメディアなどのないQtの最小バージョンを収集します。 オプションの完全なリストは、コマンド./configure --helpで表示できます。



したがって、このようなアセンブリの場合、 x86_64-w64-mingw32- g ++を含むg ++パッケージ-mingw-w64-x86-64をインストールする必要があります(パッケージはubuntuに個別にインストールする必要があります)。



次にmake && sudo make installを実行します。 コンパイルの最初の段階では、ネイティブシステムコンパイラが使用され、Linuxに必要なユーティリティが収集されます。これは、既にWindowsバイナリをビルドするために使用されます。

インストール後、 / usr / local / qt4win64 / bin PE32 + DLLと、いくつかのELF 64ビットLSB実行可能ファイル( qmake、uic、moc、rccなど)があります。 そのため、QtCreatorに便利です!



インストール後、解凍したディレクトリを削除しないでください-使用されます。



Windows 32のクロスコンパイル


Win64のコンパイルに似ています。 公式のアセンブリがある場合を除き、ライブラリ自体をコンパイルする必要はありません! qmake、uic、moc、rccを収集するだけで十分です。



構成:

非表示のテキスト
./configure -xplatform win32-x-g++ -prefix /usr/local/qt4win32 CROSS_COMPILE=i686-w64-mingw32- -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools -no-multimedia -no-qt3support -fast -nomake demos -nomake examples -nomake tools -device-option -little-endian -qt-zlib -qt-libpng -qt-libjpeg -openssl-linked -no-fontconfig -no-3dnow -no-ssse3 -continue







qmake.conf

非表示のテキスト
 # # qmake configuration for win32-x-g++ # # Written for MinGW # # Cross compile example for i686-w64-mingw32-g++: # configure -xplatform win32-g++ -device-option CROSS_COMPILE=i686-w64-mingw32- # MAKEFILE_GENERATOR = MINGW load(device_config) equals(QMAKE_HOST.os, Windows): EXE_SUFFIX = .exe TEMPLATE = app CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header QT += core gui DEFINES += UNICODE #QT_LARGEFILE_SUPPORT QMAKE_COMPILER_DEFINES += __GNUC__ WIN WIN32 QMAKE_EXT_OBJ = .o QMAKE_EXT_RES = _res.o QMAKE_CC = $${CROSS_COMPILE}gcc QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -pipe -m32 QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall -Wextra QMAKE_CFLAGS_WARN_OFF = -w QMAKE_CFLAGS_RELEASE = -O2 QMAKE_CFLAGS_DEBUG = -g QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CXX = $${CROSS_COMPILE}g++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD QMAKE_CXXFLAGS_RTTI_ON = -frtti QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions QMAKE_INCDIR = /usr/i686-w64-mingw32/include QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< QMAKE_LINK = $${CROSS_COMPILE}g++ QMAKE_LINK_C = $${CROSS_COMPILE}gcc QMAKE_LFLAGS = -m32 -mthreads -static-libgcc -static -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads QMAKE_LFLAGS_EXCEPTIONS_OFF = QMAKE_LFLAGS_RELEASE = -Wl,-s QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows QMAKE_LFLAGS_DLL = -shared QMAKE_LINK_OBJECT_MAX = 10 QMAKE_LINK_OBJECT_SCRIPT= object_script QMAKE_PREFIX_STATICLIB = lib QMAKE_EXTENSION_STATICLIB = a QMAKE_LIBS = QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32 QMAKE_LIBS_NETWORK = -lws2_32 QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32 QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32 QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain !isEmpty(QMAKE_SH) { MINGW_IN_SHELL = 1 QMAKE_DIR_SEP = / QMAKE_QMAKE ~= s,\\\\,/, QMAKE_COPY = cp QMAKE_COPY_DIR = cp -r QMAKE_MOVE = mv QMAKE_DEL_FILE = rm QMAKE_MKDIR = mkdir -p QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = test -d } else { QMAKE_COPY = copy /y QMAKE_COPY_DIR = xcopy /s /q /y /i QMAKE_MOVE = move QMAKE_DEL_FILE = del QMAKE_MKDIR = mkdir QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = if not exist } QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc$${EXE_SUFFIX} QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic$${EXE_SUFFIX} QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc$${EXE_SUFFIX} QMAKE_IDL = midl QMAKE_LIB = $${CROSS_COMPILE}ar -ru QMAKE_RC = $${CROSS_COMPILE}windres QMAKE_ZIP = zip -r -9 QMAKE_STRIP = $${CROSS_COMPILE}strip QMAKE_STRIPFLAGS_LIB += --strip-unneeded load(qt_config)
      
      







Mac OS Xのクロスコンパイル


ポピーのクロスコンパイルも非常に似ていますが、コンパイラもコンパイルする必要がある点が異なります。 この指示に従って集めました。 それは丸一日かかり、たくさんの神経がかかりました。 その過程で、そこから必要なファイルを取得するために、Xcodeがインストールされた動作中のMac OS X(少なくとも仮想マシンで)が必要になります。 Qtアプリケーションをコンパイルする場合、Mac OS Xを実行する必要はありません。



構成:

非表示のテキスト
./configure -xplatform macx-x-g++ -prefix /usr/x86_64-apple-darwin11/usr/Qt CROSS_COMPILE=/usr/x86_64-apple-darwin11/usr/bin/x86_64-apple-darwin11- -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools -no-multimedia -no-qt3support -fast -nomake demos -nomake examples -nomake tools -device-option -little-endian -qt-zlib -qt-libpng -qt-libjpeg -openssl-linked -no-fontconfig -no-3dnow -no-ssse3 -continue





qmake.conf:

非表示のテキスト
 #macx-x-g++ (different from g++.conf) # # qmake configuration for macx-g++ # # Mac OS X + command-line compiler # MAKEFILE_GENERATOR = UNIX TARGET_PLATFORM = macx TEMPLATE = app CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl QT += core gui QMAKE_INCREMENTAL_STYLE = sublib #include(../common/mac.conf) # # qmake configuration for common Mac OS X # #QMAKE_RESOURCE = /Developer/Tools/Rez QMAKE_EXTENSION_SHLIB = dylib QMAKE_INCDIR = /usr/x86_64-apple-darwin11/usr/include QMAKE_LIBDIR = QMAKE_INCDIR_QT = /usr/x86_64-apple-darwin11/usr/Qt/include QMAKE_LIBDIR_QT = /usr/x86_64-apple-darwin11/usr/Qt/lib QMAKE_INCDIR_OPENGL = /System/Library/Frameworks/OpenGL.framework/Headers \ /System/Library/Frameworks/AGL.framework/Headers/ QMAKE_FRAMEWORKDIR_QT= /usr/x86_64-apple-darwin11/usr/QtFrameworks QMAKE_FIX_RPATH = install_name_tool -id QMAKE_LFLAGS_RPATH = QMAKE_LIBS_DYNLOAD = QMAKE_LIBS_OPENGL = -framework OpenGL -framework AGL QMAKE_LIBS_OPENGL_QT = $$QMAKE_LIBS_OPENGL QMAKE_LIBS_THREAD = QMAKE_MOC = $$[QT_INSTALL_BINS]/moc QMAKE_UIC = $$[QT_INSTALL_BINS]/uic QMAKE_AR = /usr/x86_64-apple-darwin11/usr/bin/x86_64-apple-darwin11-ar cq QMAKE_RANLIB = /usr/x86_64-apple-darwin11/usr/bin/x86_64-apple-darwin11-ranlib -s QMAKE_TAR = tar -cf QMAKE_GZIP = gzip -9f QMAKE_COPY = cp -f QMAKE_COPY_FILE = $$QMAKE_COPY QMAKE_COPY_DIR = $$QMAKE_COPY -R QMAKE_MOVE = mv -f QMAKE_DEL_FILE = rm -f QMAKE_DEL_DIR = rmdir QMAKE_CHK_DIR_EXISTS = test -d QMAKE_MKDIR = mkdir -p QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.5 # overridden to 10.5 for Cocoa on the compiler command line # # qmake configuration for common unix # QMAKE_LEX = flex QMAKE_LEXFLAGS += QMAKE_YACC = yacc QMAKE_YACCFLAGS += -d QMAKE_YACCFLAGS_MANGLE += -p $base -b $base QMAKE_YACC_HEADER = $base.tab.h QMAKE_YACC_SOURCE = $base.tab.c QMAKE_PREFIX_SHLIB = lib QMAKE_PREFIX_STATICLIB = lib QMAKE_EXTENSION_STATICLIB = a #include(../common/gcc-base-macx.conf) # # This file is used as a basis for the following compilers: # # - The QNX qcc compiler # # The only difference between this and gcc-base.conf is that -pipe is removed # as it's on by default in qcc (and has an analogous -nopipe option) # QMAKE_CFLAGS += QMAKE_CFLAGS_DEPS += -M QMAKE_CFLAGS_WARN_ON += -Wall -W QMAKE_CFLAGS_WARN_OFF += -w QMAKE_CFLAGS_RELEASE += -O2 QMAKE_CFLAGS_DEBUG += -g QMAKE_CFLAGS_SHLIB += -fPIC QMAKE_CFLAGS_STATIC_LIB += -fPIC QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden QMAKE_CXXFLAGS += $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden QMAKE_LFLAGS += QMAKE_LFLAGS_DEBUG += QMAKE_LFLAGS_APP += QMAKE_LFLAGS_RELEASE += # # Base qmake configuration for GCC on Mac OS X # # Before making changes to this file, please read the comment in # gcc-base.conf, to make sure the change goes in the right place. # # To verify that your change has the desired effect on the final configuration # you can use the manual test in tests/manual/mkspecs. # QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__ QMAKE_CFLAGS_X86 += -arch i386 QMAKE_CFLAGS_X86_64 += -arch x86_64 QMAKE_CFLAGS_PPC += -arch ppc QMAKE_CFLAGS_PPC_64 += -arch ppc64 QMAKE_CFLAGS_DWARF2 += -gdwarf-2 QMAKE_CXXFLAGS_X86 += $$QMAKE_CFLAGS_X86 QMAKE_CXXFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64 QMAKE_CXXFLAGS_PPC += $$QMAKE_CFLAGS_PPC QMAKE_CXXFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64 QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2 QMAKE_OBJECTIVE_CFLAGS = $$QMAKE_CFLAGS QMAKE_OBJECTIVE_CFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_OBJECTIVE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = $$QMAKE_CXXFLAGS_HIDESYMS QMAKE_OBJECTIVE_CFLAGS_X86 = $$QMAKE_CFLAGS_X86 QMAKE_OBJECTIVE_CFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64 QMAKE_OBJECTIVE_CFLAGS_PPC = $$QMAKE_CFLAGS_PPC QMAKE_OBJECTIVE_CFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64 QMAKE_LFLAGS_X86 += $$QMAKE_CFLAGS_X86 QMAKE_LFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64 QMAKE_LFLAGS_PPC += $$QMAKE_CFLAGS_PPC QMAKE_LFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64 QMAKE_LFLAGS += -headerpad_max_install_names QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_INCREMENTAL += -undefined suppress -flat_namespace QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE} QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE} QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE} # # Qmake configuration for the GNU C++ compiler # # Before making changes to this file, please read the comment in # gcc-base.conf, to make sure the change goes in the right place. # # To verify that your change has the desired effect on the final configuration # you can use the manual test in tests/manual/mkspecs. # QMAKE_CC = /usr/x86_64-apple-darwin11/usr/bin/x86_64-apple-darwin11-g++ QMAKE_LINK_C = $$QMAKE_CC -F/usr/x86_64-apple-darwin11/usr/Frameworks QMAKE_LINK_C_SHLIB = $$QMAKE_CC -F/usr/x86_64-apple-darwin11/usr/Frameworks QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g QMAKE_CXX = /usr/x86_64-apple-darwin11/usr/bin/x86_64-apple-darwin11-g++ QMAKE_LINK = /usr/x86_64-apple-darwin11/usr/bin/x86_64-apple-darwin11-g++ -F/usr/x86_64-apple-darwin11/usr/Frameworks QMAKE_LINK_SHLIB = $$QMAKE_CXX -F/usr/x86_64-apple-darwin11/usr/Frameworks QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_PCH_OUTPUT_EXT = .gch QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE} QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE #include(../common/g++-macx.conf) # # Qmake configuration for the GNU C++ compiler on Mac OS X # # Before making changes to this file, please read the comment in # gcc-base.conf, to make sure the change goes in the right place. # # To verify that your change has the desired effect on the final configuration # you can use the manual test in tests/manual/mkspecs. # QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_DWARF2 QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_DWARF2 QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += -g $$QMAKE_CFLAGS_DWARF2 QMAKE_LFLAGS_STATIC_LIB += -all_load QMAKE_CFLAGS_X86_64 += -Xarch_x86_64 -mmacosx-version-min=10.5 QMAKE_CFLAGS_PPC_64 += -Xarch_ppc64 -mmacosx-version-min=10.5 QMAKE_CXXFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64 QMAKE_CXXFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64 QMAKE_OBJECTIVE_CFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64 QMAKE_OBJECTIVE_CFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64 QMAKE_LFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64 QMAKE_LFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64 QMAKE_OBJCFLAGS_PRECOMPILE = -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE QMAKE_OBJCXXFLAGS_PRECOMPILE = -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE load(qt_config)
      
      





Mac OS Xでは、ライブラリへのリンクに.aファイルは必要ありません。



QtCreatorを構成する


まず、インストールされているすべてのコンパイラをリストに追加する必要があります。 ツール-オプション-ビルドと実行-ツールキット:



通常、QtCreatorはABIを検出しますが、再確認することをお勧めします。 また、Linuxのシステムx64 GCCは32ビットアプリケーションを生成できることにも気付くことができます。 ただし、これは32ビットバージョンのライブラリも必要であるという事実を否定するものではありません。



コンパイラーの後、Qtプロファイルを追加できます。



ただし、プロファイルを追加するときは、 qmakeでディレクトリを選択する必要があるため、以前に収集したqmake、uic、moc、rccが便利です。 プロファイルの左側にある黄色の感嘆符は警告を意味しますが、QtCreatorはそのようなQtプロファイルを使用できます。 ただし、アイコンが赤の場合、プロファイルは非アクティブです。 これは、ディレクトリ構造が正しくない場合に発生する可能性があります。 または、Qtがコンパイルされたディレクトリを削除した場合。



作成された各プロジェクトで次の設定を行う必要があります。

アクティブなプロジェクトで特定のQtプロファイルを追加するには、「プロジェクト」タブに移動します(Ctrl + 5):





デフォルトでは、Qtシステムプロファイルのみが[ビルド構成の編集]リストにリストされます。 ただし、[追加]ボタンのリストには、すべてのQtプロファイルがアセンブリパラメーターに追加されています。



メインのビルド設定では、いくつかのコンパイラライブラリをチェックアウトする必要があります。 両方が同じオペレーティングシステムからのものであるように。



ビルドステップ「qmake」および「Build」QtCreatorセットはデフォルトで設定されています。 しかし、特別なステージ「upx」と「dmgbuild」は、プロジェクトに手動で追加しました。 「プロジェクトをビルド」ボタンをクリックするたびに、「upx」ステージが実行されます。 ただし、実行可能ファイルが変更されていない場合、 upxはファイルが既に処理されているというエラーを返します。 エラーの場合、次のステップは呼び出されません。 dmgファイルは、upxが正常に機能した場合にのみ更新されます。



upxステージが機能するには、システムにインストールする必要があります。 ただし、Linux環境で動作し、パッケージマネージャーからインストールされた場合でも、 upxはアプリケーションを圧縮できます:linux32 / 64、win32、macos32 / 64。 すべてのプロジェクトから遠く離れて、実際にupx-compressionが必要であり、このステージは例として示されています。



dmgbuildステップでは、 make_dmgスクリプトを使用しました。 彼はルート権限が必要なので、スクリプトを/ etc / sudoersファイルに追加しました



プロジェクトファイルの変更とサードパーティライブラリの使用


私のプロジェクトではlibusbを使用していますが、これはQtの一部とはほど遠いものです。 プラットフォーム固有のHIDの実装を有効にすることも必要でした。 次の行がプロジェクトファイルに追加されました。



 macx { INCLUDEPATH += $$PWD/libusbx/ SOURCES += BootLoader/HIDAPI/mac/hid.c LIBS += -framework IOKit -framework CoreFoundation -lusb-1.0 ICON = AqPicFlash.icns } win32: { INCLUDEPATH += $$PWD/libusbx/ LIBS += -lsetupapi -lole32 SOURCES += BootLoader/HIDAPI/windows/hid.cpp RC_FILE = WinIcon.rc } win32: !win64-x-g++ { LIBS += -L$$PWD/libusbx/ -lusb-1.0-32.dll } win64-x-g++ { LIBS += -L$$PWD/libusbx/ -lusb-1.0-64.dll } unix: !macx { CONFIG += link_pkgconfig PKGCONFIG += libusb-1.0 SOURCES += BootLoader/HIDAPI/linux/hid-libusb.c }
      
      





Mac OS XおよびLinuxでは、システムlibusbにリンクし、Windowsでは、ビット深度に応じてlibusb-1.0-32.dll.aまたはlibusb-1.0-64.dll.aにリンクします。 .aファイルの名前は変更できますが、アプリケーションは引き続きlibusb-1.0.dllに依存することに注意してください 。 Linuxでは、システムユーティリティpkgconfigを介してlibusbのパラメーターを取得します。 libusbに加えて、各オペレーティングシステムに必要なシステムライブラリとアイコンを接続します。



異なるオペレーティングシステム用の結果ファイルをディレクトリに配布すると便利です。 次の方法で実行できます。

 macx { DESTDIR = mac OBJECTS_DIR = mac MOC_DIR = mac UI_DIR = mac RCC_DIR = mac } unix: !macx { DESTDIR = linux OBJECTS_DIR = linux MOC_DIR = linux UI_DIR = linux RCC_DIR = linux } win32 { DESTDIR = windows/release OBJECTS_DIR = windows MOC_DIR = windows UI_DIR = windows RCC_DIR = windows } win64-x-g++ { DESTDIR = win64/release OBJECTS_DIR = win64 MOC_DIR = win64 UI_DIR = win64 RCC_DIR = win64 }
      
      





win64-x-g ++の目標はwin32に関連していますが、プロジェクトファイルの最後に来て、設定を上書きします。



結果


特定のオペレーティングシステム用のアプリケーションをビルドするには、最初のスクリーンショットに示すように、アセンブリのタイプを選択して、[プロジェクトのビルド]をクリックします。



All Articles