Wie portiere ich $ (Shell find. -Name '* .cpp') unter Windows?

631
Tomáš Zato

Ich habe folgendes in Makefile:

# find cpp files in subdirectories SOURCES := $(shell find . -name '*.cpp') 

Also wollte ich einen generischen FINDBefehl machen, der sich unter Windows und Linux korrekt verhält:

ifeq ($(OS),Windows_NT) # WINDOWS RM = erase /Q FIND = ??? else # LINUX ifeq ($(shell uname), Linux) RM = rm -f # This is probably wrong too, but I have no idea how to do it right FIND = $(find . -name '$1') endif endif 

Natürlich weiß ich nicht einmal, wie man eine parametrisierte Suchvorlage für Linux erstellt. Noch wichtiger ist jedoch, dass ich keinen Befehl zum Suchen aller Dateien nach Muster finden kann. Windows hat folgendes:

dir * /s/b | findstr \.cpp$ 

Was schön ist, aber der reguläre Ausdruck verwendet ... Wie kann ich dieses Recht portieren, damit find sich auf beiden Systemen gut verhält? Hat makefile keine eigene Methode zum Auffinden von Dateien?

1
Gibt es einen Grund, warum ein "dir * .cpp / s" nicht ausreicht? Seth vor 6 Jahren 1
Mögliches Duplikat von [Entsprechungsbefehl für Unixäquivalent unter Windows] (https://superuser.com/questions/401495/equivalent-of-unix-find-command-on-windows) Jeff Zeitlin vor 6 Jahren 0
Sie sollten sich mit MinGW / Cygwin befassen. Hierbei handelt es sich um Sammlungen von Unix-Dienstprogrammen, die unter Windows ausgeführt werden können. Sie können Unix-basierte Makefiles unter Windows ausführen (außerdem erhalten Sie eine Linux-ähnliche Shell unter Windows ...). xenoid vor 6 Jahren 0

0 Antworten auf die Frage