我想为Qt使用intel编译器,但使用intel编译器意味着运行脚本
$ source /opt/intel/bin/compilervars.sh intel64
当然,我可以将其添加到~/.bashrc
,但这不会在QtCreator中运行,它仍会抱怨缺少icpc。所以我希望它成为主要mkspec qmake文件的一部分。
如何在qmake中执行完整的bash命令?
答案 0 :(得分:2)
简短回答:使用QMAKE_EXTRA_TARGETS和PRE_TARGET_DEPS,您可以执行source /opt/intel/bin/compilersvars.sh intel64
,但只是采购它们无法解决您的问题。
长答案:QMake文件转换为Makefile。然后Make执行Makefile。您将遇到的问题是Make在自己的shell中执行每个命令。因此,简单地获取脚本只会影响一个命令,即执行脚本的命令。
有几种可能的方法可以使事情发挥作用:
也许可以修改QMake的编译器命令,但我不确定你是否可以让它执行两个命令而不是一个命令(源脚本然后执行编译器)。此外,这将使该项目无法传输到其他系统。
答案 1 :(得分:0)
您可以创建一个执行以下操作的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跨工具链的类似技术,并且到目前为止效果很好。