2

[참고 :이 질문은 비슷하지만 동일하지this one으로.]모든 Visual Studio 2008 "매크로"를 Python 스크립트에 전달하는 방법은 무엇입니까?

Visual Studio에서 포함 (C에 전혀 관계가없는 ++ 매크로) 종류의 환경 변수를 시뮬레이션 수십 "매크로"를 정의 진행중인 빌드에 대한 정보. 예 :

 
    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    

: 여기

 
    ConfigurationName Release 
    TargetPath   D:\work\foo\win\Release\foo.exe 
    VCInstallDir  C:\ProgramFiles\Microsoft Visual Studio 9.0\VC\ 

내가 (당신은 당신이 사용하는 VS 버전에 따라 다를 수 있습니다 및 활성화하는 도구)를 참조하십시오 43 내장 매크로의 전체 집합입니다 이 중 빌드 이벤트에 사용되는 환경에는 4 개 ( FrameworkDir, FrameworkSDKDir, VCInstallDirVSInstallDir) 만 설정됩니다.

Brian은 빌드 작업이 실행되는 환경에서 설정되도록 사용자 정의 매크로를 정의 할 수 있습니다. 내 문제는 내장 된 매크로입니다.

Visual Studio 포스트 빌드 이벤트를 사용하여 빌드 프로세스의 일부로 파이썬 스크립트를 실행합니다. 환경의 스크립트에 전체 매크로 집합 (내장 및 사용자 정의)을 전달하고 싶지만 어떻게해야할지 모르겠다. 스크립트 내에서 일반적인 환경 변수 (예 : Path, SystemRoot)에 액세스 할 수 있지만 이러한 "매크로"는 사용할 수 없습니다. 이제 내가 할 수있는 것은 내가 스크립트에서 처리 할 수있는 명명 된 옵션으로 하나씩 전달하는 것입니다. 목에 통증이있는 ​​것은, 빌드 후 이벤트 명령 줄의 크기에 제한이 외에도

 
    postbuild.py --t="$(TargetPath)" --c="$(ConfigurationName)" 

그래서 나는 할 수 없습니다 : 예를 들어,이 내 빌드 후 이벤트 명령 줄은 모습입니다 명령 줄이 잘 렸기 때문에이 방법을 사용하여 수십 개의 매크로를 전달할 수 있습니다.

매크로 이름과 값의 전체 집합을 MSBuild로 전환 할 필요가없는 명령 (네이티브 VC++에서 사용할 수 없다고 생각하는)이나 다른 make와 유사한 빌드로 전달하는 방법이 있는지 아는 사람은 누구입니까? 수단?

답변

0

내가 알 수있는 한,이 질문에서 설명한 방법은 빌드 변수를 파이썬 스크립트에 전달하는 유일한 방법입니다.

아마도 Visual Studio 2010의 성능이 더 좋을까요?

0

이것은 다소 해킹되지만 작동 할 수 있습니다.

여러 개의 .py 스크립트를 연속적으로 호출하지 않는 이유는 무엇입니까?

각 스크립트는 매개 변수의 작은 하위 집합과 값을 임시 텍스트 파일로 전달할 수 있습니다. 마지막 스크립트는 임시 텍스트 파일을 읽고 작동합니다.

이 방법은 위험 및 WTF로 채워지지만, 때로는 물건을 함께 해킹해야한다는 데 동의합니다.

+0

좋은 생각이지만 VisualStudio 빌드 이벤트에서 호출 할 수있는 명령 줄의 길이에는 제한이 있습니다. 128 또는 256 자 정도입니다. 너무 짧아서 N 개의 스크립트를 호출 할 수 없습니다. N = #macros (약 43 개의 내장 함수와 사용자가 정의한 함수 모두) – jwfearn

2

PropertySheets을 살펴볼 수 있습니다. 이들은 사용자 매크로를 포함하여 Visual C++ 설정을 포함하는 파일입니다. 시트는 다른 시트를 상속 할 수 있으며 Visual Studio의 PropertyManager 뷰를 사용하여 VC++ 프로젝트에 첨부됩니다. 이 시트 중 하나를 작성할 때 사용자 매크로를 작성하기위한 인터페이스가 있습니다. 이 메커니즘을 사용하여 매크로를 추가하면 사용자 매크로를 환경 변수로 설정하는 확인란이 있습니다. 우리는 빌드 시스템에서 이러한 유형의 메커니즘을 사용하여 아웃 오브 플레이스 빌드를 수행하는 프로젝트를 신속하게 설정합니다. 다양한 빌드 디렉토리는 모두 사용자 매크로로 정의됩니다. 환경 변수가 post-build에서 호출 된 외부 스크립트에 설정되어 있는지 실제로 확인하지는 못했습니다. 필자는 이러한 매크로를 사후 빌드 스크립트의 명령 줄 인수로 사용하는 경향이 있습니다. 그러나 환경 변수로 액세스하는 것이 효과적 일 것으로 예상됩니다.

+0

빌드 디렉토리와 마찬가지로 .vsprops 파일을 사용하는 것과 같습니다. 사용자 정의 변수는 OK (PerformEnvironmentSet = "true"인 경우)로 전달되지만, 어떤 이유로 든 내장 변수의 거의 모든 것이 전달되지 않습니다. – jwfearn