我正在尝试使用Qt 5.4.1构建一个交叉编译器,以便从Windows 8.1 64位计算机生成Raspberry Pi可执行文件。
我在Windows机器上使用mingw64和gcc 4.9交叉编译器,而我正在使用Qt 5.4.1源代码。 PATH指向mingw64二进制文件,gcc 4.9交叉编译器二进制文件,perl二进制文件和%windir%\ system32。
我使用以下命令构建Qt交叉编译器:
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
(...)
然后,当然,当我尝试按照mingw32-make
命令的输出中的指示运行configure
时,我收到与Windows中不存在的Unix命令相关的错误消息: / p>
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
,无济于事。
有什么建议吗?
答案 0 :(得分:3)
在设置Gitlab-CI运行器以在Windows上编译Qt项目时,我自己也遇到了同样的问题。
在qmake上使用-d
(调试)选项(参见Running qmake)我发现qmake在PATH中查找sh
,然后通过设置QMAKE_SH来确定要使用的命令集。 / p>
如果你在qmake自下而上的调试输出中搜索QMAKE_SH
,你应该找到qmake做出上述决定的行。如果找到sh
,则进一步搜索会将您带到打印出sh
的实际路径的行。
在Git for Windows(<path to git>\bin
)的路径中找到了Mine,因为有一个&#39; sh.exe&#39;在git.exe旁边的bin文件夹中。
我为我的具体案例找到了两个解决方案:
<path to git>\usr\bin
。SET PATH=%PATH:<path to remove>;=%
来执行此操作。