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

时间:2015-03-02 02:18:59

标签: c++ windows qt raspberry-pi cross-compiling

我正在尝试使用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_SHQMAKE_OS_WIN32,无济于事。

有什么建议吗?

1 个答案:

答案 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文件夹中。

我为我的具体案例找到了两个解决方案:

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