Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 詹金斯:环境变量在CMake中不可用_Bash_Cmake_Jenkins Plugins - Fatal编程技术网

Bash 詹金斯:环境变量在CMake中不可用

Bash 詹金斯:环境变量在CMake中不可用,bash,cmake,jenkins-plugins,Bash,Cmake,Jenkins Plugins,我在Kubuntu 14.04.3上运行的Jenkins作业由两个构建步骤组成: 通过“执行shell”在bash中设置环境变量 执行“CMake构建”过程 我的CMake脚本非常依赖于系统,这意味着我完全使用了$ENV{UNIX\u ENVIRONMENT\u VARIABLE}命令 但问题是,我在第一步中设置的变量在第二步中无法被CMake看到。 我尝试了不同的解决方案: 通过“export VAR=VAL”通过“Execute shell”构建步骤设置变量 通过jenkins用户的.bas

我在Kubuntu 14.04.3上运行的Jenkins作业由两个构建步骤组成:

  • 通过“执行shell”在bash中设置环境变量
  • 执行“CMake构建”过程
  • 我的CMake脚本非常依赖于系统,这意味着我完全使用了
    $ENV{UNIX\u ENVIRONMENT\u VARIABLE}
    命令

    但问题是,我在第一步中设置的变量在第二步中无法被CMake看到。 我尝试了不同的解决方案:

  • 通过“export VAR=VAL”通过“Execute shell”构建步骤设置变量
  • 通过jenkins用户的.bashrc中的“export VAR=VAL”设置变量
  • 我用于所有配置步骤,并作为Jenkins“/bin/bash”中的通用shell

    如果我将变量添加到“/etc/environment”文件中,它将与“environject”插件协同工作。
    所以我的问题是,前两种解决方案有什么问题?

    环境变量是每个进程(和子进程)

    因此,假设“executeshell”运行自己的Shell,那么这些变量对于任何其他派生的进程都不可见

    jenkins使用的
    .bashrc
    应该可以工作,假设生成的shell是一个交互式shell(几乎肯定不是)

    请尝试
    .bash\u登录


    也就是说,似乎无论什么
    environject
    都是更好的主意。

    您可以通过CMake调用传递环境变量。比如说

    TADA=helloWorld cmake ..
    

    可以在CMake脚本中作为
    $ENV{TADA}
    使用,但不能作为
    ${TADA}
    使用。cmake命令前面的位置很重要。

    但是这些方法通过“${CC}”使变量在cmake中可用,并且不等同于“$ENV{CC}”,对吗?@Tik0:no,如果通过-DCC=…添加变量,${CC}将是这种情况。。去做。请试一试。我仍然可能是错的。它不起作用,cmake将其解释为一个常见变量,正如我在评论中所说的那样。@Tik0:你是对的,我犯了一个错误,现在已经修复了。我测试了它,它对我有效。好的,现在你更正了你的答案。我认为这是非常明显的,但是现在您可以通过命令行调用cmake本身,并预先定义变量。这是可行的,但对于我的变量集来说,这不是最简单的方法。