用于win32-g ++平台的qmake生成的Makefile包含了unix命令

我试图用Qt 5.4.1构build一个交叉编译器,从Windows 8.1 64位机器生成Raspberry Pi可执行文件。

我在Windows机器上使用mingw64和gcc 4.9交叉编译器,我正在使用Qt 5.4.1源代码。 PATH指向mingw64二进制文件,gcc 4.9交叉编译器二进制文件,perl二进制文件和%windir%\ system32。

我使用以下命令来构buildQt交叉编译器:

configure.bat -platform win32-g++ -opengl es2 -device linux-rasp-pi-g++ \ -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot \dev\qtxc\sysroot \ -opensource -confirm-license -release -make libs -prefix d:\dev\qtxc \ -platform win32-g++ -xplatform linux-arm-gnueabi-g++ 

一切正常,直到最后,当我得到一些包含Unix命令的错误消息(再次,我在Windows命令提示符下的Windows机器上):

 Running configuration tests... process_begin: CreateProcess(NULL, rm -f arch.obj, ...) failed. make (e=2): The file cannot be found (...) 

然后,当我查看生成的Makefile时,我发现它错误地定义了Unix命令而不是Windows命令:

 # Makefile for building: qt # Generated by qmake (3.0) (Qt 5.4.1) # Project: qt.pro # Template: subdirs # Command: D:\dev\qtxc\qtbase\bin\qmake -o Makefile qt.pro MAKEFILE = Makefile first: make_first QMAKE = D:\dev\qtxc\qtbase\bin\qmake DEL_FILE = rm -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p COPY = cp -f COPY_FILE = cp -f COPY_DIR = cp -f -R (...) 

那么当然,当我尝试按照configure命令的输出指示运行mingw32-make ,会得到与Windows中不存在的Unix命令相关的错误消息:

 module-qtbase-qmake_all: FORCE @test -d qtbase\ || mkdir -p qtbase\ cd qtbase\ && $(QMAKE) D:\dev\qtxc\qtbase\qtbase.pro -o Makefile cd qtbase\ && $(MAKE) -f Makefile qmake_all 

@test在Windows中不起作用)。

我已经尝试修改qtbase\mkspecs\win32-g++\qmake.conf文件来删除Unix条件定义(似乎在win32文件中使用这些定义是无稽之谈),强制定义QMAKE_SHQMAKE_OS_WIN32无济于事。

有什么build议么?

当我设置一个Gitlab-CI跑步者来编译Windows上的Qt项目时,我自己也遇到了同样的问题。

在qmake上使用-d (debug)选项(请参阅运行qmake )我发现qmake在PATH中查找sh ,然后通过设置QMAKE_SH来确定使用哪个命令集。

如果你在qmake的调试输出中搜索QMAKE_SH ,你应该找到qmake作出上述决定的那一行。 如果发现sh ,则进一步搜索会将您带到打印出实际sh路径的行。

在Git for Windows的路径( <path to git>\bin路径)中找到了我的路径,因为git.exe旁边的bin文件夹中有一个“sh.exe”。

我发现了两个解决方案:

  1. 暂时将unix工具添加到PATH。 在Git for Windows 2.5.3中,它们位于<path to git>\usr\bin
  2. 暂时从PATH中删除sh的路径。 您可以通过发出SET PATH=%PATH:<path to remove>;=%来执行此操作。