2017-03-10 6 views
1

Ich habe ein Problem mit install(DIRECTORY FILE_MATCHING in cmake. Ich möchte alle Dateien erhalten, die die Dateierweiterung *.h oder keine Dateierweiterung haben. Ich habe den folgenden Code, der nicht funktioniert, weil es scheint, dass jede PATTERN mit einem OR berechnet wird (boolesche Operation) und * ist ein Platzhalter für jede Datei, und so wird jede Datei kopiert.CMake: installieren (VERZEICHNIS) und Dateien ohne Erweiterung

install(DIRECTORY mydir 
    DESTINATION . 
    FILE_MATCHING 
    PATTERN "*.h" 
    PATTERN "*" 

Weiß jemand, wie ich dieses Szenario filtern kann?

Antwort

2

Filter

PATTERN "*" 

passt eigentlich jede Datei.

Für Spiel nur Dateien ohne Erweiterung können Sie REGEX -basierte Filter verwenden:

REGEX "/[^.]+$" 
+0

Thx. Das funktioniert. 2 Minuten nach meinem ersten Post fand ich den REGEX-Befehl, aber ich habe versucht, den richtigen Ausdruck zu finden. Deines funktioniert gut, aber was mich irritiert ist, dass meine Regex auf regexr.com und regex101.com funktioniert, aber nicht in cmake => "^ [^.] + $", Weißt du, warum meine Regex in cmake nicht funktioniert, was? so besonders an der/in cmake regex? – tonka

+1

In CMake wird * PATTERN * nur auf * last component * des Pfads angewendet (dh ohne Verzeichnisse), aber * REGEX * wird auf ** full path ** angewendet. Aus [documentation] (https://cmake.org/cmake/help/v3.7/command/install.html) für den 'install' Befehl:" Ein 'REGEX' wird jeden Teil des vollständigen Pfades abgleichen, den er benutzen kann '/' und '$' um das 'PATTERN' Verhalten zu simulieren." – Tsyvarev

+0

Gut zu wissen. Danke dafür – tonka

Verwandte Themen