Câu hỏi Làm thế nào để thiết lập Qt Creator để biên dịch thực thi Windows?


Các phiên bản của Qt Creator mà tàu trong repos. có thể biên dịch các tệp thi hành Linux ra khỏi hộp. Tuy nhiên, có vẻ như một số cấu hình là cần thiết để làm cho nó biên dịch các ứng dụng Windows.

Tôi đã cài đặt chuỗi công cụ Mingw32 và tôi có quyền truy cập vào Windows xây dựng các thư viện Qt.

Tôi cần thực hiện các bước nào để thực hiện công việc này?


3
2018-04-29 22:55


gốc




Các câu trả lời:


đây là hướng dẫn cho nó Cài đặt thư viện Qt vào Wine

Bây giờ tải về Qt SDK và cài đặt nó vào môi trường rượu.   Tại thời điểm viết bài này, chúng tôi chỉ kiểm tra phiên bản 4.7.4, nhưng bạn có thể   lấy phiên bản mới nhất từ ​​trang web của nokia. Vì lợi ích của   tương thích, đảm bảo bạn tải xuống phiên bản tương tự như phiên bản   đi kèm với phiên bản Ubuntu của bạn: kiểm tra ở đây.

cd /tmp
wget http://get.qt.nokia.com/qt/source/qt-win-opensource-4.7.4-mingw.exe
wine qt-win-opensource-4.7.4-mingw.exe

Lệnh cuối cùng sẽ khởi động trình cài đặt giống như trên Windows   môi trường. KHÔNG chạy nó như sudo! Trong quá trình cài đặt, bạn sẽ   nhắc rằng MinGW bị thiếu: điều này hoàn toàn bình thường và có thể   làm ngơ.

Sau khi cài đặt thành công, chúng ta cần thiết lập biến môi trường PATH trong Wine, vì lý do nào đó, không được thiết lập tự động bởi trình cài đặt Qt. Chỉ cần chạy:

wine regedit

và duyệt đến "HKEY_CURRENT_USER / Môi trường". Nhấp chuột phải và thêm một giá trị chuỗi mới với tên "Đường dẫn". Kích đúp vào nó để chỉnh sửa và thiết lập giá trị của nó thành "c: \ windows; c: \ windows \ system; c: \ Qt \ 4.7.4 \ bin". Tham khảo Hướng dẫn sử dụng rượu để biết thêm chi tiết về cách đặt biến môi trường.

Định nghĩa môi trường qmake cross-compilation

Bây giờ cho phần khó khăn. Các chương trình Qt thường được biên dịch bằng qmake, điều này đảm bảo việc thiết lập các tùy chọn trình biên dịch phù hợp. Với mục đích này, một số tệp cấu hình cụ thể được yêu cầu cho nền tảng đích. Chúng ta cần tạo một tệp cấu hình như vậy, được thiết kế riêng cho việc biên dịch chéo. Như một mẫu, chúng ta sẽ sử dụng tệp cấu hình win32, vì vậy hãy tạo một bản sao của môi trường liên quan trước tiên:

cp -Rfp /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++

Chúng ta phải chỉnh sửa /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf và thay thế các trình biên dịch mặc định gcc và g ++ bằng các trình biên dịch chéo được cung cấp bởi gói MinGW, cùng với các tùy chọn khác. Chúng ta trông như thế này:

#
# qmake configuration for win32-g++
#
# Written for MinGW
#

MAKEFILE_GENERATOR  = MINGW
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__ WIN32

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o

QMAKE_CC        = i586-mingw32msvc-gcc
QMAKE_LEX       = flex
QMAKE_LEXFLAGS      =
QMAKE_YACC      = byacc
QMAKE_YACCFLAGS     = -d
QMAKE_CFLAGS        =
QMAKE_CFLAGS_DEPS   = -M
QMAKE_CFLAGS_WARN_ON    = -Wall
QMAKE_CFLAGS_WARN_OFF   = -w
QMAKE_CFLAGS_RELEASE    = -O2
QMAKE_CFLAGS_DEBUG  = -g
QMAKE_CFLAGS_YACC   = -Wno-unused -Wno-parentheses

QMAKE_CXX       = i586-mingw32msvc-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/i586-mingw32msvc/include/
QMAKE_INCDIR_QT     = /home/matteo/.wine/drive_c/Qt/4.7.4/include
QMAKE_LIBDIR_QT     = /home/matteo/.wine/drive_c/Qt/4.7.4/lib

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      = i586-mingw32msvc-g++
QMAKE_LINK_C        = i586-mingw32msvc-gcc
QMAKE_LFLAGS        = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
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_LIBS      =
QMAKE_LIBS_CORE         = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
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      = xcopy /s /q /y /i
    QMAKE_MOVE      = mv
    QMAKE_DEL_FILE      = rm
    QMAKE_MKDIR     = mkdir
    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-qt4
QMAKE_UIC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic-qt4
QMAKE_IDC       = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc-qt4

QMAKE_IDL       = midl
QMAKE_LIB       = ar -ru
QMAKE_RC        = i586-mingw32msvc-windres
QMAKE_ZIP       = zip -r -9

QMAKE_STRIP     = i586-mingw32msvc-strip
QMAKE_STRIPFLAGS_LIB    += --strip-unneeded
load(qt_config)

Mẹo: nếu bạn gặp phải bất kỳ sự cố nào trong khi thiết lập tệp cấu hình, hãy xem tập lệnh đi kèm với hướng dẫn này, thao tác này sẽ tự động hóa từng bước.

Tiền thưởng: thiết lập môi trường kiến ​​trúc chéo

Nhiều máy mới được xây dựng với kiến ​​trúc 64 bit. Nếu bạn đang phát triển trên một trong số này, rất có thể là bạn cũng muốn tạo ra các tệp nhị phân 32 bit có thể chạy trên các máy tính cũ hơn. Điều này dễ dàng đạt được, bởi vì gói Ubuntu cung cấp cả hai phiên bản của các thư viện. Chỉ có một dòng được thêm vào tệp cấu hình, hãy thực hiện bằng cách chạy:

echo "QMAKE_LIBDIR_QT         = /usr/lib32/" >>/usr/share/qt4/mkspecs/linux-g++-32/qmake.conf

Đối với môi trường windows, Nokia chỉ cung cấp các phiên bản 32-bit của các thư viện Qt, vốn đã tương thích với cả hai kiến ​​trúc. Các thiết lập chúng tôi trình bày sẽ đã sản xuất loại thực thi này. Nếu bạn muốn tối ưu hóa các tệp nhị phân cho môi trường 64 bit, có một vài tùy chọn:

Acquire a payed license for Qt from Nokia. Their support desk will then provide 64-bit binaries upon request.
Download the source code from the Nokia website, and compile Qt yourself for 64-bit environments.
Download and install unofficial (untrusted!) binaries you might be able to find in the Internet.

0
2018-03-28 14:42





Tôi tìm thấy một giải pháp dễ dàng hơn nhiều: chỉ cần cài đặt Qt Creator trong Wine.

Tôi đã phải sử dụng winetricks để có được các tệp thời gian chạy VC ++ 2008 được cài đặt trước nhưng sau đó, nó hoạt động hoàn hảo.


1
2018-04-30 21:34





Disclaimer: Tôi không phải là một người sử dụng Qt Creator avid, vì vậy tôi có thể sai.

Nếu Qt Creator hỗ trợ các trình biên dịch tùy chỉnh, hãy thử thiết lập trình biên dịch mingw thành một, và thiết lập đường dẫn thư viện tới các thư mục bao gồm của mingw (cùng với các đường dẫn thích hợp cho các tiêu đề cửa sổ).

Phương pháp này đã làm việc cho tôi trong quá khứ trên các IDE khác (chẳng hạn như codeblocks), vì vậy tôi đang đi trên một chi và đoán nó sẽ cho Qt Creator là tốt.

Chỉnh sửa:

Sau khi làm một số tìm kiếm xung quanh trong Qt Creator, tôi không quá chắc chắn nếu điều này là có thể.


0
2018-04-29 23:10



Nhưng tôi đặt 'trình biên dịch tùy chỉnh' ở đâu? Tôi biết những gì bạn đang nói về vì tôi đã từng làm điều tương tự trong Code :: Blocks. Nhưng Qt dường như không cung cấp tính năng này. - Nathan Osman