[ПРИМЕЧАНИЕ: этот вопрос похож, но не совпадает с этим .]
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 для запуска сценария Python как части моего процесса сборки. Я хотел бы передать весь набор макросов (встроенных и определяемых пользователем) моему сценарию в среде, но я не знаю как. В моем скрипте я могу получить доступ к обычным переменным окружения (например, Path, SystemRoot), но НЕ к этим «макросам». Все, что я могу сейчас сделать, это передать их по одному в виде именованных опций, которые я затем обрабатываю в своем сценарии. Например, так выглядит моя командная строка события после сборки:
postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)"
Помимо боли в шее, существует ограничение на размер командной строки события после сборки, поэтому я не могу передать десятки макросов, используя этот метод, даже если бы захотел, потому что командная строка урезана.
Кто-нибудь знает, есть ли способ передать весь набор имен и значений макросов команде, которая НЕ требует переключения на MSBuild (который, как я считаю, недоступен для нативного VC ++) или какой-либо другой инструмент сборки, похожий на make