Невозможно установить пользовательский $PATH для Qt Creator в OS X 10.10

Я использую Qt Creator с пользовательской системой сборки (ниндзя). Проблема в том, что переменная $PATH, переданная в IDE Qt Creator, абсолютно ванильна: /usr/bin:/bin:/usr/sbin:/sbin.

Поэтому мне приходится писать bash -c '/path/to/ninja list of targets' вместо ninja list of targets или выполнять шаги сборки в терминале, а не в IDE.

Я перепробовал все известные рецепты для настройки $PATH.

  • ~/.bash_profile и ~/.profile
  • /и т.д./пути
  • /etc/paths.d/*
  • /etc/launchd.conf (setenv PATH .....)
  • ~/Библиотека/LaunchAgents/*.plist (sh -c 'launchtcl setenv PATH $PATH:.....')
  • /Библиотека/LaunchAgents/*.plist

Идея использования агенов запуска описана в Ответ StackOverflow.

Ни один не работает! Любая произвольная переменная среды в моем пользовательском файле .plist устанавливается правильно, - любая, кроме PATH. (Я протестировал это просто: создал собственный шаг сборки echo xzxzxz=$XZXZXZ path=$PATH, где xzxzxz также установлен в моем агенте запуска).

Интересно, что если я запускаю Qt Creator из сеанса bash ('/Applications/Qt Creator.app/Contents/MacOS/Qt Creator' &), он получает правильный PATH, такой же, как и сам bash.

Также интересно, что PATH, назначенный агенту запуска, позже перезаписывается. Там я написал sh -c 'launchctl setenv PATH $PATH:/HELLOWORLD', но не вижу этого HELLOWORLD в echo $PATH. Итак, есть состояние гонки, кто-то перестраивает PATH из /etc/paths и /etc/paths.d позже.

Таким образом:

  • есть ли исчерпывающее и актуальное объяснение того, как настроить переменные среды, и в частности PATH, в OSX 10.10?
  • почему ПУТЬ становится ванильным?
  • как победить с Qt Creator?

person Nickolay Merkin    schedule 16.06.2015    source источник
comment
Путь становится ванильным, поскольку графическим приложениям он не нужен. Finder устанавливает для вас ванильный путь, и это правильное поведение в OS X. Если вам нужен путь, который дает вам ваша оболочка, вам нужно запустить login, а затем запустить приложение из оболочки - или запустить что-то еще, чтобы извлечь путь из шелла при этом запускал. Это имеет nada отношение к Qt Creator. Вам нужно запустить оболочку, чтобы проанализировать ваши сценарии оболочки, чтобы извлечь из них PATH, в значительной степени. Этого не произойдет просто так. Неванильный путь может легко сделать вашу сессию неработоспособной. Это было бы плохо.   -  person Kuba hasn't forgotten Monica    schedule 18.06.2015
comment
Я думаю, что самым простым решением будет небольшой скрипт, который извлекает ваш путь из оболочки и пропитывает им файл конфигурации проекта.   -  person Kuba hasn't forgotten Monica    schedule 19.06.2015


Ответы (1)


Вы можете просто обновить путь к среде сборки вашего проекта внутри Qt Creator.

Более новые версии (> 3.3 AFAIR, 3.4 наверняка) позволяют устанавливать переопределения среды в каждом наборе, чтобы вы могли иметь его для всех проектов, использующих их.

person Tobias Hunger    schedule 17.06.2015
comment
Да! Это решение - настроить переменные окружения прямо внутри IDE. Но я до сих пор не могу понять, что произошло с переменной PATH на входе. - person Nickolay Merkin; 17.06.2015
comment
@NickolayMerkin Почему вы ожидали путь в графической среде, который даже не запускался из оболочки? Вы действуете так, как будто все было запущено через вашу оболочку, а ваша оболочка входа знает, какой у вас ваш ПУТЬ. Нет оболочки, нет PATH. В конце концов, вы устанавливаете PATH в сценариях, которые запускаются только при запуске оболочки. В OS X графический сеанс не затрагивает оболочку даже при запуске. - person Kuba hasn't forgotten Monica; 18.06.2015
comment
@KubaOber Потому что это было бы обычным делом. Windows делает это, Linux делает то, только OSX перерезает все веревки. Как вы можете видеть, я попытался настроить среду, используя OSX-специфичный способ, похожий на верный - запустить демон. Не оболочка!!! И моя тестовая переменная XZXZXZ была установлена ​​и принята. - person Nickolay Merkin; 18.06.2015
comment
@Nickolay: Извините, мой Qt Creator foo силен, но мой Mac foo слаб :-) Не знаю, как изменить среду, которую он передает в приложения пользовательского интерфейса. - person Tobias Hunger; 18.06.2015
comment
@NickolayMerkin Windows не делает того, что делает Unix. Он сохраняет путь в настройках реестра и использует его напрямую, не вызывая оболочку. В Unices нет реестра, и путь указывается неявно в сценариях, которые необходимо выполнить, чтобы получить его. Я даже не совсем уверен, что все Unices используют путь из оболочки входа в систему для настройки X-сессии. Лично я считаю это угрозой безопасности и источником трудно отслеживаемых ошибок. Если ваше приложение хочет запустить исполняемый файл, оно должно хранить его полный путь. Qt Creator правильно создает чистый путь, даже в Unices, IIRC. - person Kuba hasn't forgotten Monica; 19.06.2015