【问题标题】:run a "source" bash shell script in qmake在 qmake 中运行“源”bash shell 脚本
【发布时间】:2013-08-11 16:38:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 只需将 /opt/intel/compilers_and_libraries_2018.2.199/linux/mkl/lib/intel64 和 /opt/intel/compilers_and_libraries_2018.2.199/linux/ipp/lib/intel64 附加到 LD_LIBRARY_PATH 即可出发!

标签: qt compiler-construction build intel qmake


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以创建一个或多或少执行以下操作的 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 交叉工具链,到目前为止效果很好。

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 2023-03-14
      • 2017-09-24
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多