我想为 Qt 使用英特尔编译器,但使用英特尔编译器意味着运行脚本
$ source /opt/intel/bin/compilervars.sh intel64
当然,我可以将它添加到~/.bashrc
,但这不会在 QtCreator 中运行它,它仍然抱怨缺少 icpc。所以我希望它成为主 mkspec qmake 文件的一部分。
如何在 qmake 中执行完整的 bash 命令?
我想为 Qt 使用英特尔编译器,但使用英特尔编译器意味着运行脚本
$ source /opt/intel/bin/compilervars.sh intel64
当然,我可以将它添加到~/.bashrc
,但这不会在 QtCreator 中运行它,它仍然抱怨缺少 icpc。所以我希望它成为主 mkspec qmake 文件的一部分。
如何在 qmake 中执行完整的 bash 命令?
简短答案:使用 QMAKE_EXTRA_TARGETS 和 PRE_TARGET_DEPS,您可以执行source /opt/intel/bin/compilersvars.sh intel64
,但简单地采购它们并不能解决您的问题。
长答案:QMake 文件被转换为 Makefile。Make 然后执行 Makefile。您将遇到的问题是 Make 在自己的 shell 中执行每个命令。因此,简单地获取脚本只会影响一个命令,即执行脚本的命令。
有几种可能的方法可以使事情正常进行:
也可以修改 QMake 的编译器命令,但我不确定你是否可以让它执行两个命令而不是一个(获取脚本然后执行编译器)。此外,这将使项目非常难以移植到其他系统。
您可以创建一个或多或少执行以下操作的 shell 脚本:
#! /usr/bin/env sh
# Remove the script's path from the PATH variable to avoid recursive calls
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export PATH=${PATH/$SCRIPT_DIR:/}
# Set the environment up
source /opt/intel/bin/compilervars.sh intel64
# Call make with the given arguments
make "$@"
将其保存到某个空目录中名为“make”的文件中,使其可执行,然后更改 QT Creator 中的构建环境以在 PATH 前面添加脚本目录:
PATH=[dir-of-make-script]:${Env:PATH}
您可以在项目设置中执行此操作,也可以在套件设置中一劳永逸地执行此操作。
像这样,QT Creator 会在调用实际的 make 二进制文件之前调用你的 make 脚本来设置你的环境。我在 Windows 下使用类似的技术和 Linux 交叉工具链,到目前为止它运行良好。