Wie erstelle ich eine bestimmte Datei aus einem GNU Automake-Paket?

Wie erstelle ich eine bestimmte Datei aus einem GNU Automake-Paket?

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, makewä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 filedort jedes Mal, wenn dies fehlschlägt, fehlende Abhängigkeiten ermitteln make, auf ähnliche Weise diese Abhängigkeiten bereitstellen und den Vorgang wiederholen, bis makedie 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 forSchleife 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 …

verwandte Informationen