Bei einem Quellpaket, das GNU Automake verwendet, sieht der typische Build folgendermaßen aus:
cd ${srcdir}
./congigure
./make
Um eine einzelne Datei statt allem zu erstellen, make
wäre normalerweise Folgendes akzeptabel:
$ make path/to/file
Es wird jedoch ein Fehler zurückgegeben:
make: *** No rule to make target 'path/to/file'. Stop.
Die erforderliche Datei befindet sich in einem Unterverzeichnis, das seine eigene Makefile enthält. Sie können in dieses Unterverzeichnis gehen und ./configure && make file
dort jedes Mal, wenn dies fehlschlägt, fehlende Abhängigkeiten ermitteln make
, auf ähnliche Weise diese Abhängigkeiten bereitstellen und den Vorgang wiederholen, bis make
die erforderliche Datei erfolgreich generiert wurde.
Aber es muss doch einen einfacheren Weg geben …?
Angenommen, es handelt sich um ein typisches Linux-Paket, das von GNU Automake sauber erstellt wird. Ist es dann möglich, ihm den Befehl zu geben, eine einzelne Datei (insbesondere eine ausführbare Binärdatei) zu erstellen?
Antwort1
Wenn sich im Unterverzeichnis ein Makefile befindet, müssen Sie wahrscheinlich stattdessen dieses Makefile aufrufen.
make -C path/to file
Antwort2
Das Beste, was mir eingefallen ist, besteht darin, mithilfe einer for
Schleife abhängige Unterverzeichnisse zu erstellen und die Datei dann aus ihrem Verzeichnis heraus zu erstellen:
for lib in dependency1 dependency2 dependency3
do
cd ${srcdir}/libs/${lib}
./configure --prefix=/usr
make LDFLAGS+=-lstdc++
done
cd ${srcdir}/libs/directory
./configure --prefix=/usr
--localstatedir=/var \
--mandir=/usr/share/man
make LDFLAGS+=-lstdc++ file
Dies beantwortet die Frage zwar nicht, aber ich fürchte, besser geht es nicht …