Comment lire un CMake Variable dans le code source C++
J'aimerais enregistrer le numéro de version de ma bibliothèque en un seul endroit. J'ai donc défini une variable dans le CMake-fichier:
SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")
Avec cette définition, je peux générer une version.fichier rc selon Microsoft définition, qui je compile dans la bibliothèque et par la suite s'affiche correctement dans la fenêtre propriétés de mon fichier dll.
Maintenant, je voudrais utiliser ce CMake variable dans mon code source c++ aussi, mais en fait je n'obtenez pas une solution de travail. J'ai essayé différentes choses comme ceci:
#ifndef VERSION_LIBINTERFACE
# define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
#endif
ou ceci:
unsigned int getLibInterfaceVersion()
{
return @LIBINTERFACE_VERSION@;
}
Mais le compilateur n'accepte pas n'importe quoi. Depuis mes travaux de recherche dans le CMake-la Documentation n'obtenez pas de résultats, j'espère que quelqu'un pourrait me donner des conseils essentiels.
Merci d'avance.
- Vous avez besoin pour passer cette valeur de la variable à compilateur comme précompilateur constante. Syntaxe exacte dépend du compilateur utilisé.
- Je suis l'aide de Visual Studio 2010 Compilateur. Donc je peux l'utiliser comme les constantes énumérées dans msdn.microsoft.com/en-us/library/b0084kay(v=vs. 80).aspx? Pouvez-vous me donner un exemple?
Vous devez vous connecter pour publier un commentaire.
La meilleure façon de le faire, est de passer le LIBINTERFACE_VERSION comme une définition de la add_definition:
Cependant, vous pouvez aussi créer un "en-tête de fichier de modèle" et l'utilisation configure_file. De cette façon, CMake remplacera votre @LIBINTERFACE_VERSION@. C'est aussi un peu plus extensible parce que vous pouvez facilement ajouter de l'définit la ou les variables ici...
E. g. créer un fichier "version_config.h.dans", qui ressemble à ceci:
Puis ajouter un configure_file ligne à votre cmakelists.txt:
Et bien sûr, assurez-vous que la bonne version_config.h est inclus dans votre code source des fichiers.