[Примечание: Это вопросы аналогично, но не то же самое в this one.]Как передать все Visual Studio 2008 «Макросы» в скрипт Python?
Visual Studio определяет несколько десятков «Макросы», которые вроде моделируемых переменных окружения (полностью не связанные с C++ макросы), которые содержат информацию о ходе строительства. Примеры:
ConfigurationName Release TargetPath D:\work\foo\win\Release\foo.exe VCInstallDir C:\ProgramFiles\Microsoft Visual Studio 9.0\VC\
Вот полный набор из 43 встроенных макросов, которые я вижу (ваши могут отличаться в зависимости от того, какая версия VS вы используете и какие инструменты вы включили):
ConfigurationName IntDir RootNamespace TargetFileName DevEnvDir OutDir SafeInputName TargetFramework FrameworkDir ParentName SafeParentName TargetName FrameworkSDKDir PlatformName SafeRootNamespace TargetPath FrameworkVersion ProjectDir SolutionDir VCInstallDir FxCopDir ProjectExt SolutionExt VSInstallDir InputDir ProjectFileName SolutionFileName WebDeployPath InputExt ProjectName SolutionName WebDeployRoot InputFileName ProjectPath SolutionPath WindowsSdkDir InputName References TargetDir WindowsSdkDirIA64 InputPath RemoteMachine TargetExt
Из них только четыре (FrameworkDir
, FrameworkSDKDir
, VCInstallDir
и VSInstallDir
) установлены в среде, используемой для событий построения.
Как упоминает Брайан, пользовательские макросы могут быть определены так, чтобы их можно было установить в среде, в которой выполняются задачи сборки. Моя проблема связана со встроенными макросами.
Я использую Visual Studio Post-Build Event для запуска сценария python как часть моего процесса сборки. Я хотел бы передать весь набор макросов (встроенных и определяемых пользователем) в мой сценарий в среде, но я не знаю, как это сделать. В моем сценарии я могу получить доступ к переменным окружения (например, Path, SystemRoot), но НЕ к этим «Макросам». Все, что я могу сделать, это передать их по-одному в качестве именных параметров, которые затем обрабатываю в моем скрипте. Например, это то, что выглядит мой после сборки командной строки событий, как:
postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"
Помимо того, что боль в шее, есть ограничение на размер после сборки командной строки событий, так что я не могу пройдите несколько десятков Макросов, используя этот метод, даже если бы я хотел, потому что командная строка усечена.
Кто-нибудь знает, есть ли способ передать весь набор имен и значений макросов команде, которая НЕ требует переключения на MSBuild (который, как я полагаю, недоступен для встроенного VC++) или какой-либо другой make-подобной сборки инструмент?
Хорошая идея, но существует ограничение на длину командной строки, вызываемой из события сборки VisualStudio. Это что-то вроде 128 или 256 символов. Слишком короткий путь для вызова N скриптов, где N = #macros (около 43 встроенных функций плюс любые, определенные пользователем). – jwfearn 2008-09-25 00:39:48