Как передать все Visual Studio 2008 "Макросы" в скрипт Python? - PullRequest
2 голосов
/ 25 сентября 2008

[ПРИМЕЧАНИЕ: этот вопрос похож, но не совпадает с этим .]

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

Ответы [ 3 ]

2 голосов
/ 25 сентября 2008

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

0 голосов
/ 14 января 2011

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

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

0 голосов
/ 25 сентября 2008

Это немного глупо, но это может сработать.

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

Каждый сценарий может передавать небольшое подмножество параметров и значений во временный текстовый файл. Финальный скрипт будет читать и обрабатывать временный текстовый файл.

Я согласен, что этот метод полон опасностей и WTF, но иногда вам нужно просто взламывать вещи вместе.

...