7
votes

Est-il possible d'ajouter des fichiers à un dossier de solution généré CMAKE dans Visual Studio?

Cette question est plus ou moins une échauffement de cette question:

Comment obtenir CUPAKE Ajouter des fichiers à l'arborescence de la solution MSVCS

Il n'a jamais eu de réponse valide, donc je veux le reposer légèrement différent: < P> est-il possible d'utiliser les dossiers de la solution CMAKE qui sont introduits avec Cumake 2.8.3 pour ajouter des fichiers directement à la solution VS? Je veux faire l'équivalent cmake de VS-> Solution-> Add-> Objet existant. Donc, mon fichier apparaîtra dans un dossier appartenant à la solution et non à un projet.

J'ai trouvé des exemples comment les dossiers de la solution peuvent être utilisés pour collecter des cibles dans des dossiers comme celui-ci: xxx

alors puis-je ajouter un fichier au lieu d'une cible au dossier?


0 commentaires

3 Réponses :


6
votes

Ce n'est probablement pas possible.

CUMAKE organise ses actifs dans les projets et les cibles . Le projet correspond au fichier de solution de Visual Studio tandis que chaque cible générera un projet Visual Studio à l'intérieur de la solution respective.

Le problème est maintenant que CMAKE ne permet pas d'ajouter des fichiers aux projets CMAKE. En fait, un projet CLAKE est un peu plus qu'une collection d'objectifs et n'offre presque aucune option de personnalisation. D'où l'option user_folders que vous avez mentionnée ne peut être utilisée que pour regrouper des projets VS dans une solution, mais pas des fichiers uniques.

Le plus proche de ce que vous demandez serait probablement d'ajouter un cible personnalisée < / a> qui détient vos fichiers. Toutefois, cela générera toujours un projet VS (qui contient également un tas d'autres éléments en plus de vos fichiers) à l'intérieur de la solution et non d'un dossier uni.



1
votes

Si je comprends la question correctement, je pense que je sais comment procéder:

set(FILES_TO_ADD
    file1
    file2
    file3)

source_group("Group Name" FILES ${FILES_TO_ADD})


3 commentaires

Non, je voulais créer un dossier sur le niveau Visual Studio Sollution. Comme vous l'avez dit, votre suggestion crée un dossier dans le cadre du projet Visual Studio. Je voulais créer un dossier pour des fichiers qui n'appartiennent pas vraiment à aucune cible, comme des fichiers contenant des fonctions CUMAKE ou des macros globales, etc. dans l'interface graphique VS, vous pouvez ajouter des articles à la Sollution et créera un dossier appelé "soultion Articles". C'est ce que je voulais réaliser avec cmake, mais j'ai échoué


@Knitschi: Avez-vous été capable de faire cela?


@Munsing Non, j'utilise toujours la solution de contournement ci-dessous où j'ajoute une cible personnalisée supplémentaire qui ne fait rien et contient les fichiers globaux.



0
votes

Cette réponse ajoute simplement un exemple de la solution "Cible personnalisée" proposée par Comicsansms dans la réponse acceptée. C'est ce que j'utilise actuellement pour ajouter mes fichiers globaux.

set( SOLUTION_FILES 
    ${CMAKE_SOURCE_DIR}/CMakeLists.txt               # root CMakeLists file
    ${CMAKE_SOURCE_DIR}/cmake/macros.cmake           # cmake functions
    ${CMAKE_SOURCE_DIR}/CMakeInCodeDefinitions.h.in  # imported cmake variables
    # etc...
)

add_custom_target( GlobalFiles SOURCES ${SOLUTION_FILES})


3 commentaires

Approche prometteuse, mais entraîne une cible qui est toujours obsolète, donc pas inoffensif.


Avez-vous eu des problèmes avec cela? J'utilise beaucoup cela pour simplement ajouter toutes sortes de fichiers à ma solution Visual Studio pour vous assurer qu'ils sont inclus dans les recherches globales. Au moins avec le générateur Visual Studio, il semble que rien ne soit fait lors de la création d'une telle cible. Peut-être que d'autres outils de construction comme Ninja se comportent différemment.


Il fait une construction no-op au lieu de sauter la cible. Une petite surcharge, mais cela entraîne un "encombrement" supplémentaire dans le journal de construction qui ne serait nécessaire que si cela était pris en charge plus directement par CMAKE. Il est subjectif si c'est un problème, mais je préférerais personnellement pas cela. Je conviens que votre proposition est un travail raisonnable, mais pas tout à fait une solution (pour moi).