2

[Примечание: Это вопросы аналогично, но не то же самое в 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-подобной сборки инструмент?

ответ

0

Насколько я могу судить, метод, описанный в вопросе, является единственным способом передать строковые переменные скрипту Python.

Возможно, Visual Studio 2010 имеет что-то лучшее?

0

Это немного хакерский, но он может работать.

Почему бы не вызвать несколько .py скриптов в строке?

Каждый скрипт может проходить в небольшом подмножестве параметров, а значения - в текстовом файле temp. Окончательный скрипт будет читать и работать со временным текстовым файлом.

Я согласен с тем, что этот метод наполнен опасностью и WTF, но иногда вам приходится просто разбирать вещи вместе.

+0

Хорошая идея, но существует ограничение на длину командной строки, вызываемой из события сборки VisualStudio. Это что-то вроде 128 или 256 символов. Слишком короткий путь для вызова N скриптов, где N = #macros (около 43 встроенных функций плюс любые, определенные пользователем). – jwfearn 2008-09-25 00:39:48

2

Возможно, вы захотите изучить PropertySheets. Это файлы, содержащие настройки Visual C++, включая пользовательские макросы. Листы могут наследоваться от других листов и присоединяться к проектам VC++ с использованием PropertyManager View в Visual Studio. Когда вы создаете один из этих листов, существует интерфейс для создания пользовательских макросов. Когда вы добавляете макрос с помощью этого механизма, есть флажок для установки пользовательского макроса в качестве переменной среды. Мы используем этот тип механизма в нашей сборной системе для быстрой настройки проектов для выполнения нестандартных сборок. Наши различные каталоги сборки определяются как пользовательские макросы. Я на самом деле не проверял, что переменные окружения установлены во внешнем скрипте, который называется post-build. Я обычно использую эти макросы в качестве аргументов командной строки для своих сценариев пост-сборки, но я ожидаю, что их доступ к ним будет изменен, поскольку переменные окружения должны работать на вас.

+0

Я использую файлы .vsprops так же, как и вы, для каталогов сборки. Пользовательские переменные передаются в порядке (до тех пор, как PerformEnvironmentSet = "true"), но по некоторым причинам почти все встроенные vars не являются. – jwfearn 2008-09-26 22:40:09

Смежные вопросы