我试图用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_SH
或QMAKE_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”。
我发现了两个解决方案:
<path to git>\usr\bin
。 SET PATH=%PATH:<path to remove>;=%
来执行此操作。