Поскольку я работаю над несколькими отдельными проектами (каждый из которых использует свой компилятор), мне не нравится, когда в моем PATH указан путь к какому-либо одному компилятору.
Теперь я присоединился к другому проекту, в котором, как мне кажется, принято указывать путь к компилятору как часть системной переменной PATH по умолчанию, и я хотел бы обойти это, но у меня возникли трудности.
Я работаю на Windows 7 с пакетом обновления 1 (64 бит), используя Cygwin.
$ uname -srv
CYGWIN_NT-6.1 1.7.32(0.274/5/3) 2014-08-13 23:06
Новый проект использует Scons в качестве среды сборки:
$ scons --version
SCons by Steven Knight et al.:
script: v2.3.4, 2014/09/27 12:51:43, by garyo on lubuntu
engine: v2.3.4, 2014/09/27 12:51:43, by garyo on lubuntu
engine path: ['/usr/lib/scons-2.3.4/SCons']
Copyright (c) 2001 - 2014 The SCons Foundation
У меня есть скрипт, который я могу запустить (прежде чем пытаться построить новый проект), который установит все необходимые переменные среды соответствующим образом (в основном это просто длинный список "export PATH = ...", "export INCLUDE = ... "," export LIB = ... "и" export LIBPATH = ... "). Я могу получить этот сценарий из любого файла запуска, и хотя путь будет задан в моей интерактивной сессии Bash
$ which cl
/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/BIN/cl
когда я пытаюсь
$ scons -u
Я получаю (в конце концов)
Compiling C++ ... Application/Infrastructure/DataManager/BitFieldDataItem/BitFieldDataItem.cpp
/bin/sh: cl: command not found
scons: *** [Build/DataManagerUnitTestWin32_Win32/Application/Infrastructure/DataManager/BitFieldDataItem/BitFieldDataItem.obj] Error 127
scons: building terminated because of errors.
Под крышками, /bin /sh bash
$ /bin/sh --version
GNU bash, version 4.1.16(8)-release (x86_64-unknown-cygwin)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
что не должно быть проблемой, потому что, как я понимаю, при вызове как /bin /sh bash пытается эмулировать оболочку POSIX; вероятно, желаемое поведение с точки зрения браков.
Сложность состоит в том, что я не могу найти способ получить необходимые переменные среды в неинтерактивную среду POSIX, не входящую в систему. Может кто-нибудь подскажите пожалуйста как это сделать?