2017-07-03 1 views
0

Ich versuche CMake zu verwenden, um eine vollständige Verzeichnisstruktur zu meinem Visual Studio-Projekt hinzuzufügen. Ich weiß, dass es in VS möglich ist, weil es mir bereits gelingt, den Stammordner der Struktur im selben Verzeichnis des Projekts manuell zu kopieren und "In Projekt einfügen" auszuwählen. Ich bin mir aber nicht sicher, ob das mit CMake möglich wäre.Generieren einer benutzerdefinierten ItemGroup in .vxcproj mit CMake

Meine .vcxproj enthält dieses ItemGroup nach diesem Handbetrieb:

<ItemGroup> 
    <Text Include="asd\test.txt" /> 
    <Text Include="asd\asd2\test.txt" /> 
</ItemGroup> 

Wie Sie uns zwei Ordner nur hinzugefügt und zwei TXT-Dateien sehen können. Dies erzeugt das Ergebnis, das ich erreichen möchte.

Haben Sie eine Idee, wie Sie dies mit CMake generieren?

+0

Mögliches Duplikat [Wie Visual Studio Filter für verschachteltes Unterverzeichnis setzen mit cmake] (https://stackoverflow.com/questions/31422680/how -to-set-visual-studio-filter-for-nested-sub-verzeichnis-using-cmake – Florian

+0

Vielen Dank Florian, aber es ist nicht das, was ich brauche: Ich muss die Verzeichnisstruktur in meinem Projekt nicht als Filter replizieren , Ich brauche die tatsächlichen Ordner im Ausgabeverzeichnis meines Projekts – Oneiros

Antwort

0

CMake soll die Details der Build/OS-Umgebung vor dem Benutzer verbergen. Dies erfordert eine gewisse Generalisierung über Plattformen/Umgebungen hinweg. Es ist daher schwierig, eine exakte Kopie eines manuell erstellten .vcxproj Projekts zu erhalten.

Sie können beliebige Dateien zu CMake-Zielen hinzufügen, einschließlich Dateien ohne Quellcode, die dann von CMake zu generierten IDE-Projekten hinzugefügt werden.

Wenn ich Ihren speziellen Fall richtig verstehe, ist das Problem, anstelle von None Werkzeugname in ItemGroup Quelldatei Auflistung zu erhalten.

Seit CMake Version 3.7 können Sie die Quelldateieigenschaft VS_TOOL_OVERRIDE verwenden, um CMake's Standard für Nicht-Quelldateien zu überschreiben.

Das folgende kleine Beispiel:

cmake_minimum_required(VERSION 3.7) 

project(HelloWorld) 

file(WRITE main.cpp [=[ 
#include <iostream> 

int main() 
{ 
    std::cout << "Hello World!" << std::endl; 
} 
]=]) 

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/asd/test.txt" "") 
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/asd/asd2/test.txt" "") 

add_executable(HelloWorld "main.cpp" "asd/test.txt" "asd/asd2/test.txt") 

set_source_files_properties(
    "asd/test.txt" 
    "asd/asd2/test.txt" 
    PROPERTIES VS_TOOL_OVERRIDE "Text" 
) 

Hat Ihre erwarteten Ergebnisse. CMake erzeugt standardmäßig nur absolute Pfade.

Referenz

Verwandte Themen