Ich möchte eine gemeinsam genutzte Bibliothek mit waf erstellen, da sie viel einfacher und weniger überladen aussieht als GNU Autotools.
Ich habe tatsächlich einige Fragen, die bis jetzt mit dem Wscript zu tun haben, mit dem ich angefangen habe zu schreiben:
%Vor% Die Zeile mit source = '*.c'
funktioniert nicht. Muss ich jede .c-Datei angeben, anstatt einen Platzhalter zu verwenden?
Wie kann ich beispielsweise einen Debug-Build aktivieren (derzeit verwendet das Wscript das Debug-Build CFLAGS, aber ich möchte dies für den Endbenutzer optional machen).
Es ist geplant, dass die Bibliotheksquellen innerhalb eines Unterverzeichnisses liegen und dass Programme, die die Bibliothek verwenden, jeweils in ihren eigenen Unterverzeichnissen liegen.
Angenommen, Sie verwenden die neueste Version von waf (1.5.9 zum Zeitpunkt des Schreibens), können Wildcards über glob()
Methode im Build-Kontext. So können Sie Folgendes schreiben:
Wenn Sie eine ältere Version von waf verwenden, die keinen glob hat, dann gibt es eine Methode find_sources_in_dirs
, die Sie verwenden können:
Diese Methode befindet sich immer noch in Waf, ist jedoch für eine Vernachlässigung vorgesehen und kann eventuell verschwinden.
Die Variablen srcdir
und blddir
sind jetzt optional, also brauchen Sie sie nicht - sie sind standardmäßig auf "." und "baue" trotzdem. Sie sollten dem Zielnamen nicht "lib" voranstellen, dies erfolgt automatisch auf plattformspezifische Weise (unter Windows wird keine Lib hinzugefügt und gemeinsame Bibliotheken verwenden .dll). Debug vs Build ist ein überraschend heikles Thema. Ursprünglich enthielt Waf diese Funktion, wurde aber irgendwann entfernt und nie wieder hinzugefügt. Es ist eine häufige Anfrage auf der Mailing-Liste, so dass es in Zukunft wieder erscheinen kann. In der Zwischenzeit könntest du viel schlimmeres tun als gjcs cflags-Modul . Fügen Sie es einfach Ihrem Projektverzeichnis hinzu. Das endgültige Wscript wäre dann:
Um einen Debug-Build zu erstellen, würden Sie Folgendes ausführen:
%Vor% Wenn Sie Bibliotheken in ihren eigenen Unterverzeichnissen verwenden, sollten Sie wahrscheinlich ein wscript auf oberster Ebene haben und bld.add_subdirs()
Technik zum Hinzufügen von Bibliotheks- / Programmverzeichnissen. Jedes Unterverzeichnis hätte seine eigene Datei wscript_build. Sie können dann die export_incdirs
und uselib_local
Eigenschaften zum Angeben der korrekten Include-Verzeichnisse zwischen Bibliothek und Programm" modules ".
waf hat sich im Laufe der Jahre sehr verändert, so dass weder der Code in der Frage noch die Antwort mit dem aktuellen waf funktioniert. Heutzutage schreibst du einfach:
%Vor% Beachten Sie, dass waf automatisch das Präfix lib
hinzufügt, sodass Sie nicht target
= 'libname'
schreiben. Unter Windows müssen Sie außerdem das defs
Schlüsselwort-Argument zum Funktionsaufruf shlib
hinzufügen.
Persönlich würde ich gegen rekursive Build-Skripte mit wscript_build
-Dateien empfehlen. Nicht, dass es nicht funktioniert (wie rekursive Makefiles ), es ist einfach einfacher, die gesamte Logik in einem mittelgroßen Build zu behalten Skript.
Tags und Links c linux shared-libraries waf