Générer projet C# à l'aide de CMake
Je suis en train de générer un projet C# au sein d'une C++ CMake code de base sur Windows. Après quelques recherches, j'ai pu trouver que deux projets qui ont construit leur propre CSharp compilateurs pour CMake:
gdcm et kde.
J'ai essayé les deux d'entre eux. Malheureusement, le premier pas à réaliser un projet C#. Au lieu de cela, il a créé un VS C++ projet avec cs fichiers, et à cause de C++ indicateurs définis pour l'éditeur de liens, construire la toujours a échoué avec l'erreur. Après avoir expérimenté avec l'exemple de projet, qu'ils ont fourni, je me demande si cela pourrait être dû à une limitation de la "Visual Studio 2005 8" générateur de code?
Le deuxième projet vise principalement à Mono, donc je n'ai pas de succès avec elle, soit.
Quelqu'un a eu une expérience positive avec la construction de projets C# à l'aide de l'un de ces CMake modules ou autre chose?
Vous devez vous connecter pour publier un commentaire.
De CMake 3.8.2, CSharp de la génération de projets est officiellement pris en charge par CMake.
Pour construire la valeur par défaut de Visual Studio 2017 générés C#/WPF projet en utilisant CMake, créer un CMakeList.txt fichier comme suit.
Déclaration De Projet
Inclure CMake
CSharpUtilities
si vous prévoyez sur l'utilisation de WPF ou de créateurs d'autres propriétés.Ajouter tous les
cs
,xaml
,settings
,properties
Lien concepteur de fichiers,
xaml
fichiers, et d'autres propriétés des fichiers avec leurs correspondantscs
fichiersMis en application
App.xaml
fichier de propriétés en tant que point d'entrée du programme (si le projet est un projet WPF)De définir d'autres
csproj
fichier indicateursAjout de bibliothèques
Pour un travail WPF exemple, voir https://github.com/bemehiser/cmake_csharp_example
Pour un WinForms exemple, voir cette réponse.
project(CPPExample VERSION 0.1.0 LANGUAGES CPP)
dans le dossier C++, construire votre bibliothèque cible, puis utiliser la cible dans le projet C#. Il y a peut être d'autres plus élégante des façons de le faire, mais c'est la façon dont je l'ai fait.set(CMAKE_CSharp_FLAGS "/langversion:6")
CMake 2.8.9 et ajouter un
TYPE
paramètreinclude_external_msproject
comme suit:Cette option permet d'indiquer que le projet est en C# (la magie GUID ci-dessus), sinon les choses de la lutte (voir les docs).
Vous aurez probablement souhaitez utiliser le
configure_file
modèle d'approche mentionné ailleurs avec votre.csproj
fichier pour obtenir le bon chemin en elle, sauf si vous êtes en train de construire directement dans votre arborescence des sources.La bonne nouvelle est que vous pouvez les génériques de votre C# les fichiers dans le
.csproj.template
fichier comme ceci:Et vous aurez besoin de quelque chose comme cela dans votre
CMakeLists.txt
pour convertir CMake est de style unix forwardslash des séparateurs de chemin dans le style Windows barres obliques inverses, sinon il va compiler les fichiers, mais ils ne s'affichent pas de liens dans le projet dans Visual Studio:Alors c'est juste:
Dans votre
CMakeLists.txt
pour configurer le fichier de modèle en un véritable fichier de projet avec le droit chemin d'accès générique.HTH.
.sln
est [re-]généré sinon ils sont "Oubliées". Des idées? J'ai demandé à ce sujet ici: stackoverflow.com/q/15859576/135862Juste au cas où quelqu'un est toujours à la recherche d'informations à ce sujet, il n'y a vraiment aucune raison pour générer des projets C# avec CMake, ils sont de la croix-plate-forme de conception. Sur Linux, les projets C# sont généralement gérés avec MonoDevelop qui peut lire .csproj fichiers à partir de visual studio très bien. Cela devrait permettre à la croix-plate-forme de développement de projets C#.
Le seul problème potentiel serait si vous aviez natif c++ projets mixtes avec les projets c# (comme un backend écrit en c++ avec une interface graphique en c#), dans ce cas seulement ont cmake une copie sur votre .csproj fichiers comme s'ils étaient de données et vous devriez être bon d'aller.
CMake est destiné à configurer votre environnement de compilation pour être multi-plateforme. Cela vient vraiment pratique avec c++, là où le code est construit d'une manière très différente sur linux que sur windows (ou d'autres systèmes d'exploitation si vous êtes dans que), mais est en quelque sorte inutile pour c# qui peut exécuter la croix-plate-forme, et, grâce à des décisions de conception par l'équipe de mono, peut construire de la croix-plate-forme. CMake ne fournissent d'excellents outils pour automatiser les choses, mais beaucoup de ces fonctionnalités peuvent être récupérés avec un correctement configuré .fichier csproj.
De toute façon je sais que cette question est de plus d'un an, mais c'est l'un des principaux résultats de la recherche je suis tombé sur quand je cherchais comment faire cela. Depuis, j'ai fait cette prise de conscience.
J'ai finalement été en mesure de générer une solution valide à l'aide de la deuxième c# module - kde.
Bien que, cmake créé un certain nombre de .vcproj fichiers alors que je m'attendais à obtenir .csproj, mais je suppose que c'est la seule forme de "Visual Studio 2005 8" générateur peut offrir.
Néanmoins, j'ai pu réussir à construire cette solution et de produire des exécutables et les bibliothèques dll.
À piggy-back sur la réponse fournie par @the_storyteller, CMake v3.8 et plus, en effet, prend en charge C# comme un premier de la classe de langue. Parce que WPF exemple était déjà prévu, ici, est un CMake exemple pour une simple application Windows Forms. J'ai fourni les commandes en option pour les liens dans d'autres bibliothèques construites localement dans l'arbre source, et la liaison 3ème partie des dépendances de la bibliothèque.
Noter que les applications Windows Forms exigent l'utilisation de la
csharp_set_windows_forms_properties
commande CMake, alors que les projets WPF utilisationcsharp_set_designer_cs_properties
etcsharp_set_xaml_cs_properties
.CMakeLists.txt
Vous pouvez créer un projet avec Visual Studio, de le démonter et de le rendre CMake écrire à l'aide de
configure_file
commande (vous devrez générer un peu de XML avec la liste des sources) et l'ajouter à la solution avecinclude_external_msproject
(pour d'autres générateurs, vous aurez besoin pour créer la cible personnalisée pour exécuter msbuild sur manuellement; cmake ne semblent pas étayer le faire encore). Le projet est assez simple, il devrait donc être possible de le faire.