通过CLion的C ++程序找不到环境变量

时间:2017-02-06 07:18:32

标签: c++ cmake environment-variables clion

我正在尝试在CLion中编写一个C ++程序并使用一个自定义的环境变量。操作系统是 Ubuntu 16.04

假设环境变量是$ test。

int main (int argc, char **argv){

    std::cout<<getenv("PATH");
    std::cout<<getenv("test");
}

我在设置中设置了环境变量 - &gt; build ...-&gt; CMAKE-&gt;环境 environment variable set

我可以在通过CMAKE构建时打印它。

message($ENV{test}) 

this is test

但是当构建并运行上面编译的代码时,只打印出$ PATH。似乎程序找不到$ test变量。

任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

好吧,我不知道CLion,但看起来你确定设置环境变量仅用于CMake。当你运行你的程序时,它根本就没有设置。

答案 1 :(得分:0)

我遇到了同样的问题,下面的步骤解决了我的问题。 在

中设置变量
  

运行->编辑配置,应用程序/环境变量

答案 2 :(得分:0)

如果要在C ++运行时中读取环境变量,例如使用std::getenv

您可以在“运行配置”中添加此类变量(重要 CMake环境变量) enter image description here

然后在您的代码中:

std::filesystem::path getRootConfigPath()
{
    // std::getenv can return nullptr and this is why we CAN'T assign it directly to std::string
    const char* path = std::getenv("TEST_CONFIG_DIR");
    gcpp::exception::fail_if_true(
        path == nullptr, WHERE_IN_FILE, "No such environment variable: ${TEST_CONFIG_DIR}");

    gcpp::exception::fail_if_true(std::string_view{path}.empty(),
                                  WHERE_IN_FILE,
                                  "Missing ${TEST_CONFIG_DIR} environment variable");

    const std::filesystem::path testConfigDir{path};
    gcpp::exception::fail_if_false(std::filesystem::exists(testConfigDir) &&
                                       std::filesystem::is_directory(testConfigDir),
                                   WHERE_IN_FILE,
                                   "Invalid ${TEST_CONFIG_DIR} dir:" + testConfigDir.string());
    return testConfigDir;
}

gcpp::exception::fail_if_true的来源


在运行单元测试时以更友好的方式执行此操作的另一种方法是将此变量添加到模板中。

因此,无论何时单击: enter image description here

这样的变量已经存在了。

enter image description here