7

두 개의 플랫폼 툴셋이 있습니다 : 내 프로젝트의 경우 v110 및 v110_xp이고 선택한 플랫폼에 따라 컴파일 할 코드의 일부를 포함하거나 제외하려고합니다.Visual Studio : 플랫폼 도구 집합을 전처리 지시문으로 사용하는 방법?

_MSC_FULL_VER$(PlatformToolsetVersion)은 두 플랫폼 모두에 대해 정확히 동일한 값을 갖습니다.

_MSC_PLATFORM_TOOLSET=$(PlatformToolset) 

을하지만 문제는 $(PlatformToolset) 숫자가 아닌 점이다 : 또한, 나는 다음과 같이 $(PlatformToolset)을 사용하려고했습니다. 이 비 숫자 값을 전 처리기 지시어로 어떻게 사용할 수 있을지 궁금해하십니까?

시도 몇 가지 솔루션은 내가

_MSC_PLATFORM_TOOLSET='$(PlatformToolset)' 

다음

#if (_MSC_PLATFORM_TOOLSET=='v110') 
    [Something] 
#endif 

잘 작동하지만 것을 생각 에서

#if(_MSC_PLATFORM_TOOLSET == 'v110_xp') 
    [SomethingElse] 
#endif 

결과 "문자에 너무 많은 문자 상수" 오류 . 컨텍스트에 대한

이 비슷한 질문 참조하십시오 Visual Studio: how to check used C++ platform toolset programmatically

답변

6

project properties -> C/C++ -> Preprocessor로 이동하여 다음 Preprocessor Definitions에 추가 :이 같은

_MSC_PLATFORM_TOOLSET_$(PlatformToolset)

그런 다음 당신이 쓸 수있는 무언가 :

#ifdef _MSC_PLATFORM_TOOLSET_v110 
    [Something] 
#endif 

#ifdef _MSC_PLATFORM_TOOLSET_v110_xp 
    [SomethingElse] 
#endif 

이것은 나를 위해 VS2010에서 작동합니다.

3

VS 2012/2013의 경우 이전 버전과의 호환 도구 세트를 사용하는 경우 _USING_V110_SDK71_을 사용할 수 있습니다. VS2013은 플랫폼 도구 세트 이름 (v120_xp)에 관계없이 동일한 이름을 정의합니다.

#if (_MSC_VER >= 1700) && defined(_USING_V110_SDK71_) 
    // working in XP-compatibility mode 
#endif