8 votes

Vérification de la compilation en tant que bibliothèque statique

Comment puis-je vérifier à la compilation si le projet est compilé comme une librairie statique ?

Existe-t-il une sorte d'assert statique ou un autre indicateur que je puisse vérifier ?

Je ne peux pas ajouter une variable de préprocesseur moi-même, car il s'agit d'un utilitaire qui sera utilisé dans d'autres projets au sein de l'entreprise. Je me demande donc s'il n'y a pas un drapeau de préprocesseur qui est envoyé par défaut ou quelque chose comme ça.

J'utilise Visual Studio 2010

10voto

Abyx Points 4776

Il n'existe pas de liste de macros prédéfinies - http://msdn.microsoft.com/en-us/library/b0084kay%28v=vs.100%29.aspx .

Mais par défaut, MSVC ajoute _LIB à la liste des définitions du préprocesseur, s'il s'agit d'un projet de "bibliothèque statique".
(il ajoute également _USRDLL pour les DLL)

Editer : Dans Visual Studio 2017, la définition des DLL est la suivante _WINDLL (de la feuille de propriétés "Windows Dynamic Link Library" appliquée par l'IDE). Les _LIB n'est plus disponible.

Une autre solution consiste à ajouter une feuille de propriétés au projet (enregistré dans votre référentiel de contrôle de version) avec la définition de préprocesseur suivante : _$(OutputType);%(PreprocessorDefinitions) .

$(OutputType) sera résolu comme "library" pour les DLL et "staticlibrary" pour les bibliothèques statiques, ce qui donne _library y _staticlibrary respectivement (ou _exe pour les applications).

%(PreprocessorDefinitions) empilera les définitions des fiches de propriétés précédentes. Veillez à ce qu'elles soient également incluses dans les propriétés du projet !

Pour ajouter une feuille de propriétés, naviguez vers Vue | Autres fenêtres | Gestionnaire immobilier dans Visual Studio.

0voto

Bartek Banachewicz Points 13173

Si vous utilisez Visual Studio, je ne vois pas vraiment ce qu'il y a de mal à ajouter votre propre définition de préprocesseur. Le raisonnement derrière cela est que vous doivent de toute façon fournir des fichiers de projet afin que l'option soit correctement distribuée avec le fichier de projet.

Ou encore, vous pourriez vouloir dire "comment vérifier si un dossier est compilé comme une bibliothèque" - il n'y a aucun moyen (autre que la définition du compilateur).

-1voto

jxramos Points 79

Ce qu'un assemblage particulier construit est explicitement défini dans le fichier vcxproj, il est connu et défini avant la compilation. Ce qui peut être délicat, c'est que dans les paramètres de votre fichier de solution qui apparaissent dans le gestionnaire de configuration, la configuration et la plate-forme de votre solution peuvent s'être fixées sur une configuration et une plate-forme de projet bizarres qui ne correspondent pas à la construction de votre solution.

Dans le fichier xml vcxproj, le type de sortie de la construction apparaîtra comme la valeur de l'attribut <ConfigurationType> élément.

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>MultiByte</CharacterSet>
  </PropertyGroup>

De la même manière, dans le projet, les pages de propriétés dans la section Configuration Properties -> General -> Configuration Type est l'endroit où vous spécifiez ce que votre assemblage construit. Vous pouvez même vous écarter de l'extension cible si cela a un sens, par exemple lorsque je construis des trucs BoostPython, je remplace dll par pyd.

Project Property highlighting Configuration Type setting

Pour mettre en évidence le type de mélange bizarre dont je parle, qui peut être dû à une erreur ou à une fusion défectueuse, vous pouvez vérifier quels sont les paramètres de construction détaillés pour chaque projet dans la configuration de la solution. Je donne un exemple ci-dessous où la plateforme de la solution est ReleaseOffline mais les différents projets de la solution sont réglés sur Release, DebugStatic, etc. La plupart des projets sont désactivés dans la capture d'écran, mais vous pouvez imaginer un mélange de dépendances qui mettrait les choses dans un mauvais état en mélangeant les types de construction. Certains mélanges peuvent être intentionnels, alors assurez-vous de savoir ce que vous faites/cherchez puisque Visual Studio offre ce type de flexibilité dans ces configurations. N'oubliez pas non plus que les paramètres que vous voyez sont spécifiques à la paire configuration/plateforme sélectionnée. Si vous changez l'un ou l'autre, vous verrez probablement des changements dans les valeurs de tout ce qui a été discuté ci-dessus.

Sample project configuration mixup in configuration manager

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X