这个mingw包含
gcc 4.6.3,名称为 – i686-w64-mingw32.
在Windows上,一个Qt’s.pro文件w.r.t是一个hello world程序:
- QT += core gui
- TEMPLATE = app
- TARGET = ef
- SOURCES = ef.cpp
- DEPENDPATH += .
- INCLUDEPATH += .
- INCLUDEPATH += c:/R-2.15.1/include
- INCLUDEPATH += c:/R-2.15.1/library/Rcpp/include
- INCLUDEPATH += c:/R-2.15.1/library/RInside/include
- LIBS += -L c:/R-2.15.1/bin/i386 -lR
- LIBS += -L c:/R-2.15.1/library/Rcpp/libs/i386 -lRcpp
- LIBS += -L c:/R-2.15.1/library/RInside/libs/i386 -lRInside
该计划编制如下:
注意最后有一个警告.
系统路径如下:
Qt的路径:
请指出我遗漏的一点.
更新:
现在我已经更新了qmake.conf,如下所示:
- #
- # 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 = 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 = 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 =
- 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 = g++
- QMAKE_LINK_C = gcc
- QMAKE_LFLAGS = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
- 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,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 = -lopengl32 -lglu32 -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_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.exe
- QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exe
- QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe
- QMAKE_IDL = midl
- QMAKE_LIB = ar -ru
- QMAKE_RC = windres
- QMAKE_ZIP = zip -r -9
- QMAKE_STRIP = strip
- QMAKE_STRIPFLAGS_LIB += --strip-unneeded
- load(qt_config)
错误现在已更改为:
UPDATE
如
this merge request所示,qmake.conf文件中存在一个错误,该错误配置了每次使用qmake的默认配置时使用的变量.
选项-enable-stdcall-fixup需要以-Wl为前缀,以便通过mingw32-g正确解析,因为-e …将在解析时被拆分为-e ….此前缀仅表示“不要将以下内容解析为-e nable-stdcall-fixup,而是解析为-enable-stdcall-fixup”.
qmake.conf文件包含-Wl但是在错误的行中,因此合并请求表示
the leading “-Wl,” was apparently accidentally split off to the wrong
line.
补丁将-Wl向上移动一行.您可以在qmake.conf文件上手动执行此操作,该文件应位于mkspecs / win32-g /qmake.conf下的Qt安装下.更改以下行:
- QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-runtime-pseudo-reloc
- QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
进入这个:
- QMAKE_LFLAGS = -Wl,-enable-runtime-pseudo-reloc
- QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
请注意,-Wl和-enable-stdcall-fixup之间不应有空格.它应该作为一个单独的参数传递给g,以实现我们想要的.