7

Ich habe zwei Plattform-Toolsets: v110 und v110_xp für mein Projekt, und abhängig von der gewählten Plattform möchte ich einen Teil des zu kompilierenden Codes einschließen/ausschließen.Visual Studio: Wie Plattform-Toolset als Präprozessordirektive zu verwenden?

_MSC_FULL_VER und $(PlatformToolsetVersion) haben für beide Plattform-Toolsets genau denselben Wert. Alternativ habe ich versucht, $(PlatformToolset) wie folgt zu verwenden:

_MSC_PLATFORM_TOOLSET=$(PlatformToolset) 

aber das Problem ist, dass $(PlatformToolset) nicht numerisch. Ich frage mich, wie kann ich diesen nicht-numerischen Wert als Präprozessor-Direktive verwenden?

Der Versuch, mehrere Lösungen habe ich herausgefunden, dass

_MSC_PLATFORM_TOOLSET='$(PlatformToolset)' 

und dann

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

funktioniert gut, aber

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

Ergebnisse in "zu viele Zeichen in Zeichenkonstante" Fehler .

Für den Zusammenhang mit diesen ähnliche Frage finden Sie unter: Visual Studio: how to check used C++ platform toolset programmatically

Antwort

6

zu project properties -> C/C++ -> Preprocessor gehen und fügen Sie den folgenden Preprocessor Definitions:

_MSC_PLATFORM_TOOLSET_$(PlatformToolset)

Dann können Sie so etwas schreiben:

#ifdef _MSC_PLATFORM_TOOLSET_v110 
    [Something] 
#endif 

#ifdef _MSC_PLATFORM_TOOLSET_v110_xp 
    [SomethingElse] 
#endif 

Dies funktioniert für mich in VS2010.

3

Wenn Sie für die Version 2012/2013 das Abwärtskompatibilitäts-Toolset verwenden, steht Ihnen _USING_V110_SDK71_ zur Verfügung. VS2013 definiert denselben Namen unabhängig vom Namen des Plattform-Toolsets, nämlich v120_xp.

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