【问题标题】:How to compile a Qt application through the command line with MinGW?如何使用 MinGW 通过命令行编译 Qt 应用程序?
【发布时间】:2012-02-25 01:45:18
【问题描述】:

我已经为 MinGW 下载了最新的 Qt 版本,并且我拥有与 Qt 兼容的正确 MinGW 版本。当我尝试制作项目时,即使它与项目文件位于同一文件夹中,g++ 也无法找到我的源文件。

这些是我遵循的步骤(所有项目和源文件都在 T:\QtTest 中):

T:\QtTest> qmake -project
T:\QtTest> qmake
T:\QtTest> make

输出是这样的:

T:\QtTest> make
mingw32-make -f Makefile.Debug
mingw32-make1: Entering directory `T:/QtTest’
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I“c:\Qt\4.8.0\include\QtCore” -I“c:\Qt\4.8.0\include\QtGui” -I“c:\Qt\4.8.0\include” -I”.” -I“c:\Qt\4.8.0\include\ActiveQt” -I“debug” -I“c:\Qt\4.8.0\mkspecs\default” -o debug\main.o main.cpp
g++: main.cpp: no such file or directory
g++: no input files
mingw32-make1: *** [debug/main.o] Error 1
mingw32-make1: Leaving directory `T:/QtTest’
mingw32-make: *** [debug] Error 2

我不知道为什么它与“main.cpp”文件位于同一目录中时找不到 项目文件。即使我用完整路径(“T:\QtTest\main.cpp”)替换“main.cpp”,它仍然找不到它。我做错了什么?

以下是我的项目结构: (main.cpp是我写的唯一文件,其他都是qmake生成的)

T:\QtTest\main.cpp 
T:\QtTest\Makefile
T:\QtTest\Makefile.debug
T:\QtTest\Makefile.release
T:\QtTest\QtTest.pro
T:\QtTest\debug\
T:\QtTest\release\

我的 g++ 版本是 4.4.0,这是 Qt 安装程序建议的版本,可在与 Qt for MinGW 安装程序相同的页面下载。

【问题讨论】:

  • @FernandoAiresCastello:您可能想要发布项目文件。和 t:\qttest 的目录列表。此外,您可能还想提及 g++ 版本。

标签: qt makefile mingw


【解决方案1】:

问题解决了。

它与 MinGW 或 Qt 或 qmake 生成的 makefile 无关。我发现这完全是由 Windows 注册表中的自定义条目引起的。我为遇到相同问题的任何人发布此解决方案:

前段时间我在 Windows 注册表中的 HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor 下创建了一个名为 Autorun 的条目,这使得 CMD.exe 在自定义工作目录中启动,这是我想做的事情(所以我按照中详述的步骤本页关于“如何更改命令提示符的默认启动目录”http://windowsxp.mvps.org/autoruncmd.htm)。

好吧,我完全忽略了该页面中的 CAUTION 部分,它指出“使用本文中提到的 Autorun 值更改当前目录可能会影响批处理脚本的功能” 。是的,真丢人。

因此,如果您遇到无法使用 qmake 制作 Qt 项目的相同问题,并且在您的项目结构和 makefile 中其他一切看起来都正常,请确认您在 Windows 注册表中没有任何内容可能会更改命令提示符的启动目录。

【讨论】:

    【解决方案2】:

    您是否安装了 MSYS?如果来自 MSYS 的 sh.exe 在系统路径上,则可能与 windows 样式路径的解释冲突。查看文档here

    如果这不是问题,则删除项目文件夹中除源文件之外的所有内容,然后使用qmake -project 重新开始。完成该步骤后,打开.pro 文件并验证事情是否正确。对于一个非常基本的项目,我得到这样的结果:

    TEMPLATE = app
    TARGET = 
    DEPENDPATH += .
    INCLUDEPATH += .
    # Input
    HEADERS += widget.h
    FORMS += widget.ui
    SOURCES += main.cpp widget.cpp
    

    接下来的两个步骤,运行qmake 然后make 应该可以正常工作。如果不是,那么您遵循的步骤没有问题,并且您的系统/环境有问题。

    【讨论】:

    • 我没有安装 MSYS(如果我在命令行中输入 sh.exe,它不会找到这个程序)。我打开了 .pro 文件,它看起来不错。我编辑了 qmake 生成的 Makefile.debug 并包含了 main.cpp 和 debug/main.o 的完整路径以及对我的项目文件的所有其他引用。有用。但是,如果我修改我的代码并使用 qmake,我必须再次编辑 makefile。所以它变得乏味和不必要的工作。有没有办法强制 qmake 包含我的项目的完整路径?
    猜你喜欢
    • 2012-05-26
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多