2017-05-31 3 views
0

Ich möchte in der Lage sein, die Voraussetzungen für ein Makefile aus einer Dateiliste zu lesen.Verwenden einer Dateiliste für die make-Voraussetzungen

Die Dateiliste sieht wie folgt aus etwas:

/projects/abc/a.v 
/projects/abc/b.v 
/projects/abc/c.v 

und die Dateiliste heißt source.flist

Diese Dateiliste ziemlich lang ist, und ich will einfach diese Dateiliste als für Voraussetzung verwenden Sie eine der die Ziele im Makefile.

Kann mir bitte jemand sagen, wie das erreicht werden kann.

PS: Ich bin auf einem Anfänger Niveau w.r.t. Makefiles

Dank Sundeep

+0

Was haben Sie versucht, so weit? – hering

+0

Das ist ziemlich einfach, aber warum ist es notwendig? Eine Liste von bekannten Voraussetzungen, wie lange auch immer, in eine Datei zu setzen und sie dann in die 'make' einzulesen, ist lediglich komplizierter und zerbrechlicher als die Liste in das Makefile zu setzen. –

+0

Ich habe noch nichts versucht. Ich weiß nicht, wo ich die Definition der Variable env eintragen könnte, die die Dateiliste sein wird. –

Antwort

1

Ich würde dies tun, indem Sie Ihre Liste der Dateien in eine Make-Datei in einem weiteren Schritt der Umwandlung:

# Makefileall: 
all: depsfromfile.out 
depsfromfile.mk: 
    (echo "depsfromfile:"; cat depsfromfile)| sed -e '/^#/d' -e 's/$/ \\/' -e '$s/ \\//' > depsfromfile.mk # there is a \t at the beginnging of this line! 

-include depsfromfile.mk 
depsfromfile.out: depsfromfile 
    @touch depsfromfile depsfromfile.out 
depsfromfile: 
    cat $^ > [email protected] 
    @touch depsfromfile 

mit einer Dateiliste depsfromfile

# depsfromfile 
a 
b 
c 

Das Makefile generiert automatisch seine Abhängigkeiten von der Datei depsfromfile. Das Testziel verwendet die depsfromfile, um die Ausgabe zu erzeugen.

Das Ziel depsfromfile:, das automatisch in depsfromfile.mk generiert und in das Makefile aufgenommen wird, enthält die Abhängigkeiten.

Das Ziel depsfromfile.out wird nur regeneriert, wenn eine Abhängigkeit von depsfromfile geändert wurde.

Jetzt können Sie

# echo "test a" > a 
# echo "test b" > b 
# echo "test c" > c 
# make 
cat a b c > depsfromfile.out 
# make 
make: Nothing to be done for 'all'. 
Verwandte Themen