【问题标题】:Qt using "mingw32-make" in command line with .exe file generation errorQt 在命令行中使用“mingw32-make”并出现 .exe 文件生成错误
【发布时间】:2018-11-26 16:33:12
【问题描述】:

到目前为止,我已经在命令行中使用了qmake -projectqmake,配置了.pro文件,Makefile.Debug和Makefile.Release已经解决。但是当我尝试在命令行中使用 mingw32-make 为我的项目生成 .exe 时发生错误。

错误意味着在行:

64 ****missing separator ...Stop

但在这种情况下,我已经为 mingw32-make.exeqmake.exe 设置了所有环境变量。

有人说我应该在makefile.release中添加一个Tab而不是一个空格,在错误发生的地方(错误位置只有一个“qmake命令自动生成的,所以也许这不是真正的问题...... 这是错误信息和部分 Makefile.Release 文件以供参考 :

Setting up environment for Qt usage...
Remember to call vcvarsall.bat to complete environment setup!

D:\qt5.10\5.9.2\msvc2017_64>cd D:\qtProgramme\helloworld

D:\qtProgramme\helloworld>mingw32-make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory 'D:/qtProgramme/helloworld'
Makefile.Release:64: *** missing separator.  Stop.
mingw32-make[1]: Leaving directory 'D:/qtProgramme/helloworld'
Makefile:36: recipe for target 'release' failed
mingw32-make: *** [release] Error 2

D:\qtProgramme\helloworld>

这里是 Makefile.Release:

#############################################################################
# Makefile for building: helloworld
# Generated by qmake (3.1) (Qt 5.9.2)
# Project:  helloworld.pro
# Template: app
#############################################################################

MAKEFILE      = Makefile.Release

####### Compiler, tools and options

CC            = cl
CXX           = cl
DEFINES       = -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG
CFLAGS        = -nologo -Zc:wchar_t -FS -Zc:strictStrings -O2 -MD -W3 -w44456 -w44457 -w44458 $(DEFINES)
CXXFLAGS      = -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc $(DEFINES)
INCPATH       = -I. -I. -I..\..\qt5.10\5.9.2\msvc2017_64\include -I..\..\qt5.10\5.9.2\msvc2017_64\include\QtWidgets -I..\..\qt5.10\5.9.2\msvc2017_64\include\QtGui -I..\..\qt5.10\5.9.2\msvc2017_64\include\QtANGLE -I..\..\qt5.10\5.9.2\msvc2017_64\include\QtCore -Irelease -I..\..\qt5.10\5.9.2\msvc2017_64\mkspecs\win32-msvc 
LINKER        = link
LFLAGS        = /NOLOGO /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"
LIBS          = /LIBPATH:D:\qt5.10\5.9.2\msvc2017_64\lib D:\qt5.10\5.9.2\msvc2017_64\lib\qtmain.lib /LIBPATH:C:\utils\my_sql\my_sql\lib /LIBPATH:C:\utils\postgresql\pgsql\lib shell32.lib D:\qt5.10\5.9.2\msvc2017_64\lib\Qt5Widgets.lib D:\qt5.10\5.9.2\msvc2017_64\lib\Qt5Gui.lib D:\qt5.10\5.9.2\msvc2017_64\lib\Qt5Core.lib 
QMAKE         = D:\qt5.10\5.9.2\msvc2017_64\bin\qmake.exe
IDC           = idc
IDL           = midl /NOLOGO
ZIP           = zip -r -9
DEF_FILE      = 
RES_FILE      = 
COPY          = copy /y
SED           = $(QMAKE) -install sed
COPY_FILE     = copy /y
COPY_DIR      = xcopy /s /q /y /i
DEL_FILE      = del
DEL_DIR       = rmdir
MOVE          = move
CHK_DIR_EXISTS= if not exist
MKDIR         = mkdir
INSTALL_FILE    = copy /y
INSTALL_PROGRAM = copy /y
INSTALL_DIR     = xcopy /s /q /y /i
QINSTALL        = D:\qt5.10\5.9.2\msvc2017_64\bin\qmake.exe -install qinstall
QINSTALL_PROGRAM = D:\qt5.10\5.9.2\msvc2017_64\bin\qmake.exe -install qinstall -exe

####### Output directory

OBJECTS_DIR   = release

####### Files

SOURCES       = main.cpp 
OBJECTS       = release\main.obj

DIST          =   main.cpp
QMAKE_TARGET  = helloworld
DESTDIR        = release\ #avoid trailing-slash linebreak
TARGET         = helloworld.exe
DESTDIR_TARGET = release\helloworld.exe

####### Implicit rules

.SUFFIXES: .c .cpp .cc .cxx

{.}.cpp{release\}.obj::
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -Forelease\ @<<
    $<
<<

{.}.cc{release\}.obj::
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -Forelease\ @<<
    $<
<<

{.}.cxx{release\}.obj::
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -Forelease\ @<<
    $<
<<

{.}.c{release\}.obj::
    $(CC) -c $(CFLAGS) $(INCPATH) -Forelease\ @<<
    $<
<<

####### Build rules

first: all
all: Makefile.Release  $(DESTDIR_TARGET)

$(DESTDIR_TARGET):  $(OBJECTS) 
    $(LINKER) $(LFLAGS) /MANIFEST:embed /OUT:$(DESTDIR_TARGET) @<<
release\main.obj
$(LIBS)
<<

qmake: FORCE
    @$(QMAKE) -o Makefile.Release helloworld.pro

qmake_all: FORCE

【问题讨论】:

  • 在我看来,您的 makefile 是一个 qmake makefile,并且您正在尝试使用 GNU make 运行它。如果是真的,那是行不通的。你必须找到qmake 并使用它,而不是 GNU make。
  • 非常感谢。但是这个makefile是使用qmake自动生成的。现在我想使用 mingw32-make 生成 .exe 文件。如果不是 mingw32-make,那么我应该尝试哪个命令。我试过make,但做不出来。
  • 我帮不了你。也许其他了解 qmake 的人可以提供帮助。我只能说 Implicit rules 区域中的 makefile 部分不是有效的 GNU make 语法。其他配方也不是:@&lt;&lt; ... &lt;&lt; 语法在 GNU make 中无效。
  • 感谢您的帮助!

标签: qt makefile qmake


【解决方案1】:

您正在使用 Qt 的 MSVC 版本。这可以通过安装路径(D:\qt5.10\5.9.2\msvc2017_64)和输出“记得调用vcvarsall.bat完成环境设置!”来推断。

来自 Qt 的 MSVC 构建的 QMake 生成与 MSVC 兼容的 makefile(至少在默认情况下)。

安装 Qt 的 MinGW 构建,您可以将 MinGW 工具链用于您的项目。

【讨论】:

  • 谢谢!但我的编译器是我之前选择的 MSVC C++。我的调试器是我自己设置的VS 2017x64。那么在那种情况下,我还能用mingw32-make生成.exe文件吗?或者你的意思是我必须安装 MinGW 才能使用 mingw32-make?如果我想通过cmd生成.exe,有​​什么更好的选择?
  • 如果你想使用mingw32-make,你必须使用MinGW和一个Qt的MinGW build。我假设您想使用 mingw32-make,因为 nmake 不会并行构建?然后你可以使用 jom,它是一个 nmake 克隆,它添加了已知的 -j 选项来启用并行构建。它可以在这里找到:download.qt.io/official_releases/jom/jom.zip
猜你喜欢
  • 2023-03-25
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2021-02-08
  • 1970-01-01
相关资源
最近更新 更多