У меня есть куча аргументов, которые я хочу передать команде несколько раз. Чтобы уменьшить количество раз, когда я пишу одни и те же аргументы, и, таким образом, уменьшать количество мест, где я должен поддерживать эти аргументы, я подумал, что было бы неплохо поместить их все в строку и передать эту строку. Однако команда видит всю строку как один аргумент, что, естественно, вызывает проблемы.
Вот пример сценария того, чего я добиваюсь. (Это для строительства GDAL, кстати).
$baseOptions = "MSVC_VER=1910 GDAL_HOME='$outputDir\' SWIG='$swig'"
#Building x86
if($x86 -eq $true)
{
$options = $baseOptions + " BINDIR='$outputDir\x86\bin' LIBDIR='$outputDir\x86\lib' INCDIR='$outputDir\x86\include'"
if($useLibcurl -eq $true)
{
$options += " CURL_DIR='$libcurlDir/x86' CURL_INC='-I$libcurlDir/include' CURL_LIB='$libcurlDir/x86/lib/libcurl.lib wsock32.lib wldap32.lib winmm.lib'"
}
#Building x86 release
if($release -eq $true)
{
nmake /f makefile.vc $options
nmake /f makefile.vc install $options
nmake /f makefile.vc devinstall $options
}
#Repeated for debug...
#Some more use of $options to create C# wrappers...
}
#Repeated for x64...
Просто чтобы собрать нативную часть GDAL для выпуска в x86, мне нужно запустить nmake
три раза. Возможно, мне не понадобятся одинаковые аргументы для каждого запуска nmake
, но неясно, какие аргументы нужны для запуска и отслеживания этого, что было бы просто дополнительной поддержкой. Что ж, повторите это для отладки, а затем выпустите и отладьте для x64, а затем несколько раз для создания оболочек C #.
Если я не могу изменить набор аргументов, подобных этому, мне также придется продублировать код для того, хочу ли я создать GDAL с зависимостью от libcurl. Сложность станет огромной, если мне придется добавить поддержку других зависимых библиотек.
Я попытался превратить всю команду в строку, чтобы расширить $options
следующими способами, но безрезультатно:
. "nmake /f makefile.vc $options"
& "nmake /f makefile.vc $options"
Вся строка, конечно, рассматривается как команда, а не команда с аргументами ...
На самом деле я нашел ответ, когда писал этот вопрос, но решил все равно попросить помочь тем, кто может искать решение так же отчаянно, как и я. Я все равно буду приветствовать ответы, которые решают ту же проблему по-другому! Может быть, те, которые не полагаются на аргументы, собранные в одну строку?