2013-11-27 4 views
6

Diese Frage ist mehr oder weniger ein Warm-up dieser Frage:Ist es möglich, Dateien zu einem CMake generierten Lösungsordner in Visual Studio hinzuzufügen?

how to get cmake to add files to msvcs solution tree

Es ist nie eine gültige Antwort bekommen, damit ich es etwas anders zur Ruhe wollen:

Ist es möglich, verwenden Sie die cmake Lösung Ordner, die mit cmake 2.8.3 eingeführt wurden, um Dateien direkt zur vs-Lösung hinzuzufügen? Ich möchte das Cmake-Äquivalent von VS-> Solution-> Add-> Existing Item machen. So wird meine Datei in einem Ordner angezeigt, der zur Lösung und nicht zu einem Projekt gehört.

Ich fand Beispiele, wie die Lösung Ordner können wie folgt mit Code-Gruppe Ziele in Ordnern verwendet werden:

set_property(GLOBAL PROPERTY USE_FOLDERS ON) 
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER "Test") 

So kann ich eine Datei statt ein Ziel in den Ordner hinzufügen?

Antwort

6

Dies ist wahrscheinlich nicht möglich.

CMake organisiert seine Vermögenswerte in Projekte und Ziele. Das Projekt entspricht der Lösungsdatei von Visual Studio, während jedes Ziel ein Visual Studio-Projekt innerhalb der jeweiligen Lösung generiert.

Das Problem ist jetzt, dass CMake nicht erlaubt, Dateien zu CMake-Projekten hinzuzufügen. In der Tat ist ein CMake-Projekt wenig mehr als eine Sammlung von Zielen und bietet fast keine Anpassungsoptionen. Daher kann die von Ihnen erwähnte Option USE_FOLDERS nur dazu verwendet werden, VS-Projekte innerhalb einer Lösung zu gruppieren, aber nicht einzelne Dateien.

Am nächsten zu dem, was Sie fragen, wäre wahrscheinlich eine custom target hinzuzufügen, die Ihre Dateien enthält. Dies erzeugt jedoch immer noch ein VS-Projekt (das neben Ihren Dateien noch eine Menge anderer Dinge enthält) innerhalb der Lösung und keinen einfachen Ordner.

+0

Vielen Dank für die schnelle Antwort. Ich würde dich wählen, aber ich bin ein Mann von geringem Ansehen. Wie können Sie dann globale Dateien wie CMake-Makros zum Projekt/zur Lösung hinzufügen? – Knitschi

+0

Es gibt keinen "besten" Weg, dies zu tun. CMake selbst neigt dazu, alle mit einem Ziel verbundenen Dateien in das VS-Projekt dieses Ziels zu stellen: Zum Beispiel enthält jedes VS-Projekt immer die CMakeLists.txt, mit der es erstellt wurde, auch wenn dies dazu führt, dass dieselbe CMakeLists.txt mehrmals erscheint die Lösung. Wenn Sie also einen ähnlichen Ansatz wählen, der zumindest konsistent ist. Abhängig von der Art Ihrer Dateien und Ihrem persönlichen Arbeitsablauf kann eine andere Form der Organisation von Dateien sinnvoller sein. Zum Beispiel, ich persönlich bearbeiten CMake-Dateien nie innerhalb von VS, so dass ich sie überhaupt nicht einschließen. – ComicSansMS

+0

Ich habe das auch gemacht, aber ich habe vor kurzem das Cmake-Syntax-Highlighting-Plugin für VS installiert und jetzt bearbeite ich die Dateien in VS. Ich denke, ich werde den Ansatz "Include the global files in all targets" mit einem zusätzlichen Ordner im Ziel verwenden, der die Dateien enthält. – Knitschi

1

Wenn ich die Frage richtig verstanden habe, ich glaube, ich weiß, wie es geht:

set(FILES_TO_ADD 
    file1 
    file2 
    file3) 

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

Der source_group Befehl, um den Ordner innerhalb des Visual Studio-Projekt erstellt.

+0

Nein Ich wollte einen Ordner auf dem Visual Studio-Lösungsebene erstellen. Wie Sie bereits gesagt haben, erstellt Ihr Vorschlag einen Ordner unter dem Visual Studio-Projekt. Ich wollte einen Ordner für Dateien erstellen, die nicht wirklich zu einem Ziel gehören, wie Dateien, die CMake-Funktionen oder globale Makros usw. enthalten. In der VS GUI können Sie der Lösung Elemente hinzufügen und einen Ordner namens "Soultion" erstellen Artikel". Das wollte ich mit CMake erreichen, aber ich habe versagt – Knitschi

0

Diese Antwort fügt nur ein Beispiel für die "benutzerdefinierte Ziel" -Lösung hinzu, die von ComicSansMS in der akzeptierten Antwort vorgeschlagen wurde. Dies ist, was ich derzeit verwende, um meine globalen Dateien hinzuzufügen.

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}) 
Verwandte Themen