2016-08-08 12 views
-1

Derzeit habe ich ein funktionierendes ausführbares Programm erstellt, das etwas tut. Aber mein Problem ist, dass mein ausführbares Programm kann nur Eingabe eines .cc Datei zu einem Zeitpunkt, indem SieKompilieren von .cc-Datei in einem Ordner auf einmal

[email protected]:~/build$ bin/lel simple-loops.cc -- 

Wobin/lel ist das ausführbare Programm undsimple-loops.cc ist die Datei.

Ist es möglich, die Dateien innerhalb eines Ordners hinzuzufügen und meinem Programm zu erlauben, alles innerhalb des Ordners zu kompilieren, indem Sie einfach den Ordnernamen eingeben?

für z.

[email protected]:~/build$ bin/lel (folder name) -- 
+0

Suchen Sie im Internet nach "Linux für jedes Dateiverzeichnis". –

+0

@thomasmatthews Ich habe versucht, BOOST C++ Bibliothek zu verwenden, aber das funktioniert nicht für mich. – HiWorld

+0

Wie wäre es 'für den Dateinamen im Ordner/*. Cc; do bin/lel $ Dateiname; fertig? – immibis

Antwort

0

Ja, es ist möglich. Unter Linux können Sie opendir, readdir und closedir verwenden, um alle Dateien in einem Verzeichnis aufzulisten. Beispiel:

DIR *dir = opendir("name-of-folder"); 
// if dir is NULL that means the open failed, like with fopen 
struct dirent *dirent; 
while((dirent = readdir(dir)) != NULL) 
{ 
    printf("Found a directory entry: %s\n", dirent->d_name); 
} 
closedir(dir); 
+0

@HiWorld Dann übergeben Sie das in das Terminal getippte Ding zu "opendir", anstatt es etwas zu übergeben, das statisch erklärt wird? – immibis

1

Der übliche Weg, dies zu tun, ist der Benutzer eine beliebige Anzahl von Argumenten übergeben zu lassen, die Verwendung von Shell ermöglicht Platzhalter usw. zu erweitern bei Bedarf:

for (int i = 1; argv[i]; ++i) { // N.B. don't start at 0 
    processFile(argv[i]); 
} 

Dann können Sie laufen es mit

./a.out *.cc 

, um das gewünschte Verhalten zu erhalten. Ich schätze, Sie wollen nicht jede Datei (einschließlich Backup-Dateien und .. usw.) sowieso verarbeiten.

Verwandte Themen