我正在尝试在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变量。
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
好吧,我不知道CLion,但看起来你确定设置环境变量仅用于CMake。当你运行你的程序时,它根本就没有设置。
答案 1 :(得分:0)
我遇到了同样的问题,下面的步骤解决了我的问题。 在
中设置变量运行->编辑配置,应用程序/环境变量
答案 2 :(得分:0)
如果要在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的来源
在运行单元测试时以更友好的方式执行此操作的另一种方法是将此变量添加到模板中。
这样的变量已经存在了。