Nano Hash - криптовалюты, майнинг, программирование

Программа С++ через CLion не может найти переменную среды

Я пытаюсь написать программу на C++ в CLion и использовать одну самоопределяемую переменную среды. ОС: Ubuntu 16.04.

Скажем, переменная окружения — это $test.

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

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

Я установил переменную среды в настройках-›build...-›CMAKE-›Environment environment набор переменных

Я могу распечатать его при сборке через CMAKE.

message($ENV{test}) 

this is test

Но при сборке и запуске скомпилированного кода выше распечатывался только $PATH. Кажется, программа не может найти переменную $test.

Кто-нибудь знает, как решить эту проблему?


  • Обычно IDE допускают отдельные среды для создания и запуска вашей программы. Установите переменную среды в конфигурации запуска, а не в параметрах CMake. 06.02.2017
  • @yeputons спасибо! Он работает после установки переменной среды в конфигурации запуска. 06.02.2017
  • Связанный с этим вопрос о переменных среды CMake: stackoverflow.com/a/38874446/1052261 11.01.2020

Ответы:


1

Ну, я не знаю CLion, но похоже, что вы установили переменную среды для использования только в CMake. Когда вы запускаете свою программу, она просто не устанавливается.

06.02.2017
  • да! как сказал @yeputons, после установки переменной среды в конфигурации запуска она работает! Большое спасибо! 06.02.2017

  • 2

    У меня была такая же проблема, и следующие шаги решили мою проблему. Установите свои переменные в

    Выполнить->Редактировать конфигурации, переменные приложения/среды

    09.09.2018

    3

    Если вы хотите прочитать переменную среды во время выполнения С++, например. используя 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


    Другой способ сделать это более удобным способом при запуске модульных тестов — добавить эту переменную в шаблон.

    Поэтому всякий раз, когда вы нажимаете: введите здесь описание изображения

    Такая переменная уже будет там.

    введите здесь описание изображения

    11.01.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..