在qmake中运行“source”bash shell脚本

时间:2013-08-11 16:39:00

标签: qt compiler-construction build intel qmake

我想为Qt使用intel编译器,但使用intel编译器意味着运行脚本

$ source /opt/intel/bin/compilervars.sh intel64

当然,我可以将其添加到~/.bashrc,但这不会在QtCreator中运行,它仍会抱怨缺少icpc。所以我希望它成为主要mkspec qmake文件的一部分。

如何在qmake中执行完整的bash命令?

2 个答案:

答案 0 :(得分:2)

简短回答:使用QMAKE_EXTRA_TARGETS和PRE_TARGET_DEPS,您可以执行source /opt/intel/bin/compilersvars.sh intel64,但只是采购它们无法解决您的问题。

长答案:QMake文件转换为Makefile。然后Make执行Makefile。您将遇到的问题是Make在自己的shell中执行每个命令。因此,简单地获取脚本只会影响一个命令,即执行脚本的命令。

有几种可能的方法可以使事情发挥作用:

  • 在启动Qt-Creator之前执行脚本。我实际上已经完成了一些需要设置特殊环境变量的项目。为了让我的生活更轻松,我创建了一个shell命令来设置环境,然后启动Qt-Creator。
  • 在Qt-Creator中,修改项目的构建环境我也使用了这个技巧。在您的情况下,只需查看脚本的环境设置,并更改项目的项目选项卡下的“构建环境”设置,以匹配脚本的设置。

也许可以修改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跨工具链的类似技术,并且到目前为止效果很好。