qmake 为 win32-g++ 平台生成的 Makefile 包含 unix 命令
qmake-generated Makefile for win32-g++ platform contains unix commands
我正在尝试使用 Qt 5.4.1 构建交叉编译器,以从 Windows 8.1 64 位计算机生成 Raspberry Pi 可执行文件。
我在 Windows 机器上为 Pi 使用 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
(...)
然后,当然,当我按照 configure
命令输出中的指示尝试 运行 mingw32-make
时,我收到与 Unix 命令相关的错误消息不存在于 Windows:
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
, 无济于事。
有什么建议吗?
我在设置 Gitlab-CI 运行程序以在 windows.
上编译 Qt 项目时遇到了同样的问题
在 qmake 上使用 -d
(调试)选项(参见 Running qmake)我发现 qmake 在 PATH 中查找 sh
然后通过设置 sh
来确定要使用的命令集 QMAKE_SH.
如果你在 qmake 自下而上的调试输出中搜索 QMAKE_SH
,你应该找到 qmake 做出上述决定的行。如果找到 sh
,进一步向上搜索会将您带到打印出 sh
的实际路径的那一行。
我的是在 Git 的路径中找到 Windows (<path to git>\bin
),因为在 [=36= 旁边的 bin 文件夹中有一个 'sh.exe' ].
我为我的特殊情况找到了两个解决方案:
- 暂时将 unix 工具添加到 PATH。在 Git for Windows 2.5.3 中,它们位于
<path to git>\usr\bin
.
- 暂时从 PATH 中删除 sh 的路径。您可以通过向命令行发出
SET PATH=%PATH:<path to remove>;=%
来执行此操作。
我正在尝试使用 Qt 5.4.1 构建交叉编译器,以从 Windows 8.1 64 位计算机生成 Raspberry Pi 可执行文件。
我在 Windows 机器上为 Pi 使用 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
(...)
然后,当然,当我按照 configure
命令输出中的指示尝试 运行 mingw32-make
时,我收到与 Unix 命令相关的错误消息不存在于 Windows:
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
, 无济于事。
有什么建议吗?
我在设置 Gitlab-CI 运行程序以在 windows.
上编译 Qt 项目时遇到了同样的问题在 qmake 上使用 -d
(调试)选项(参见 Running qmake)我发现 qmake 在 PATH 中查找 sh
然后通过设置 sh
来确定要使用的命令集 QMAKE_SH.
如果你在 qmake 自下而上的调试输出中搜索 QMAKE_SH
,你应该找到 qmake 做出上述决定的行。如果找到 sh
,进一步向上搜索会将您带到打印出 sh
的实际路径的那一行。
我的是在 Git 的路径中找到 Windows (<path to git>\bin
),因为在 [=36= 旁边的 bin 文件夹中有一个 'sh.exe' ].
我为我的特殊情况找到了两个解决方案:
- 暂时将 unix 工具添加到 PATH。在 Git for Windows 2.5.3 中,它们位于
<path to git>\usr\bin
. - 暂时从 PATH 中删除 sh 的路径。您可以通过向命令行发出
SET PATH=%PATH:<path to remove>;=%
来执行此操作。