2

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

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

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

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

4

2 回答 2

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 的编译器命令,但我不确定你是否可以让它执行两个命令而不是一个(获取脚本然后执行编译器)。此外,这将使项目非常难以移植到其他系统。

于 2013-08-14T12:59:46.147 回答
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 交叉工具链,到目前为止它运行良好。

于 2018-07-04T11:36:30.167 回答