7

J'ai deux outils de plate-forme: v110 et v110_xp pour mon projet, et en fonction de la plate-forme choisie, je veux inclure/exclure une partie du code à compiler.Visual Studio: comment utiliser les outils de la plate-forme comme directive de préprocesseur?

_MSC_FULL_VER et $(PlatformToolsetVersion) ont exactement la même valeur pour ces deux jeux d'outils de plate-forme. Sinon, j'ai essayé d'utiliser $(PlatformToolset) comme suit:

_MSC_PLATFORM_TOOLSET=$(PlatformToolset) 

mais le problème est que $(PlatformToolset) est non numérique. Se demandait comment puis-je utiliser cette valeur non numérique comme une directive de préprocesseur?

essayé plusieurs solutions, je compris que

_MSC_PLATFORM_TOOLSET='$(PlatformToolset)' 

puis

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

fonctionne très bien, mais

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

résultats dans "trop ​​de caractère à caractère constant" erreur .

Pour le contexte s'il vous plaît voir cette question similaire: Visual Studio: how to check used C++ platform toolset programmatically

Répondre

6

Aller à project properties -> C/C++ -> Preprocessor et ajouter ce qui suit à Preprocessor Definitions:

_MSC_PLATFORM_TOOLSET_$(PlatformToolset)

vous pouvez écrire quelque chose comme ceci:

#ifdef _MSC_PLATFORM_TOOLSET_v110 
    [Something] 
#endif 

#ifdef _MSC_PLATFORM_TOOLSET_v110_xp 
    [SomethingElse] 
#endif 

Cela fonctionne pour moi dans VS2010.

3

Pour VS 2012/2013, si vous utilisez un jeu d'outils rétrocompatibles, _USING_V110_SDK71_ sera disponible pour vous. VS2013 définira le même nom, quel que soit le nom de l'ensemble d'outils de la plate-forme, qui est v120_xp.

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