2011-01-07 10 views
3

Ich bin neu zu m4 und versuche, ein Makro einzurichten, mit dem der Benutzer den Speicherort einer Bibliothek zur Konfigurationszeit ./configure --with-mylib=/path/to/lib.so angeben kann.m4 - Ausführen eines Shell-Befehls

In der M4-Makro mit AC_ARG_WITH, ich werde überprüfen, dass die angegebene Datei tatsächlich existiert, und speichern Sie den Pfad zu dieser Bibliothek. MYLIB_PATH=esyscmd([dirname $withval]). Dies erzeugt den Fehler:

dirname: missing operand

Die Shell scheint über $withval nicht zu wissen. Wie bekomme ich es durch, um diesen Befehl auszuführen?

Danke,

Andrew

+0

Warum nicht einfach den Benutzer den Speicherort der Bibliothek angeben, indem Sie LDFLAGS festlegen? –

+0

Als Umgebungsvariable vor dem Build? – ajwood

+0

Als ein Argument zu konfigurieren, oder in einer config.site. "./configure LDFLAGS = -L/path/to/lib" sollte funktionieren. –

Antwort

3

Das ist, weil esyscmd von m4 ausgeführt wird, wenn Ihr configure Skript zu erzeugen, das heißt bei "Zeit übersetzen". Verwenden Sie

MYLIB_PATH=`dirname $with_mylib` 

stattdessen.

Beachten Sie, dass $withval „tatsächlich with_package nur der Wert des Shell-Variable genannt wird, mit allen möglichen nicht-alphanumerischen Zeichen in Paket in _ geändert“, so dass alle Vorkommen von / werden entfernt und es wird wahrscheinlich nicht ein gültiger Pfad sein .

+0

Heh ... das ist die intuitive Art, die ich aus irgendeinem Grund dachte, habe ich schon versucht. Vielen Dank! – ajwood