【问题标题】:Clion or cmake does not see environment variableClion 或 cmake 看不到环境变量
【发布时间】:2016-10-06 08:07:51
【问题描述】:

我正在使用 CLion IDE、Cmake 并尝试使用 CERN ROOT 库编写 Hello world

CMakeLists.txt

message(STATUS $ENV{ROOTSYS})

~/.bashrc

export ROOTSYS="$HOME/tools/root-build/"

在构建 CLion 期间,$ENV{ROOTSYS} 因某种原因为空。但是$ENV{PATH} 返回正确的$PATH

我做错了什么?

【问题讨论】:

    标签: cmake environment-variables clion root-framework


    【解决方案1】:

    .bashrc 中的变量没有通过。

    转到文件 -> 设置 -> 构建、执行、部署

    对于 Clion 2017.2+


    对于老克莱恩

    点击通行证系统和...


    如果你想在 C++ 运行时读取环境变量,例如然后使用std::getenv 它不起作用,因为我们为 CMAKE 添加了环境变量而不是运行时。

    您可以添加这样的变量:

    然后在你的代码中:

    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的来源


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

    所以每当您点击:

    这样的变量已经存在了。

    【讨论】:

    • 您是否有机会更新它以匹配 2017.2 版本的 CLion?它看起来不像这些屏幕截图。
    • 是否可以为用于运行 CMake 的 shell 指定 RC 文件?在某些情况下环境变量不是很好 - 例如,我将 Conan(包管理器)安装到 ./local,然后将此目录添加到 PATH(通过 .bashrc),但我仍然无法从 CMake 运行 Conan。
    【解决方案2】:

    来自 CLion 开发者FAQ

    问:如何在CLion中向CMake传递环境变量和参数?

    A:最好的方法是使用 Preferences/Settings |构建、执行、部署 | CMake 对话框。

    至于.bashrc文件,只有bash使用。 CLion 不需要使用 bash 来运行配置过程。

    【讨论】:

    • Clion 将获取在/etc/environment 文件中设置的环境变量。请参阅下面的答案。
    【解决方案3】:

    在Ubuntu 17.04上,可以通过修改设置永久环境变量

        /etc/enviornment
    

    [我假设您可以在其他版本的 Linux 中执行此操作,但我提供了我正在使用的系统版本。]

    例如,我正在编译假设 ${GOOGLE_MOCK} 已设置的测试用例。我将以下内容添加到我的 /etc/environment 文件中,现在我不必重写所有 CMakeLists.txt 文件:

        GOOGLE_MOCK=/usr/local/src/googletest/googlemock
        GOOGLE_TEST_HOME=/usr/local/src/googletest/googletest
    

    Clion 变得更加实用。希望这对其他人有帮助!

    【讨论】:

      【解决方案4】:

      您可以检查的一件事是.gdbinit。 Linux 上的 Clion 将调用 gdb,它将读取 .gdbinit。我碰巧在我的.gdbinit 文件中有set environment LD_LIBRARY_PATH xxx,它将覆盖您从shell 设置的LD_LIBRARY_PATH,无论是通过直接export 还是通过.bashrc,还是从CLion 环境变量面板。

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        在 .profile 而不是 .bashrc 中获取变量

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-17
          • 1970-01-01
          • 2021-10-20
          • 2019-03-01
          • 2016-07-30
          • 2018-02-17
          • 2015-05-10
          相关资源
          最近更新 更多