Frage

Ich habe nicht gesehen, alle Fragen, die im Zusammenhang mit GNU autoconf/automake baut, aber ich hoffe, dass zumindest einige von Ihnen da draußen sind vertraut mit es.Hier geht:

Ich habe ein Projekt (ich nenne es myproject) mit einem anderen Projekt (Verkäufer).Der Verkäufer Projekt ist ein eigenständiges Projekt gepflegt von jemand anderem.Darunter auch ein Projekt wie dieses ist ziemlich einfach, aber in diesem Fall gibt es einen winzigen Haken:jedes Projekt erzeugt seine eigene config.h Datei, von denen jeder definiert die standard-Makros wie-PAKET, - VERSION, usw.Dies bedeutet, dass, während der bauen, wenn Hersteller gebaut wird, erhalte ich viele Fehler wie dieser:

... warning: "VERSION" redefined
... warning: this is the location of the previous definition
... warning: "PACKAGE" redefined
... warning: this is the location of the previous definition

Dies sind nur Warnungen, vorerst zumindest, aber ich möchte, um loszuwerden von Ihnen.Die einzige relevante information, die ich habe stellen können mit einem Google-Suche diese thread auf dem automake-mailing-Liste, die ist nicht eine ganze Menge helfen.Hat jemand anderes eine bessere Idee?

War es hilfreich?

Lösung

Einige Hinweise:

  • Sie hat nicht erwähnt, wie config.h enthalten war - mit Anführungszeichen oder Klammern.Finden diese andere Frage für mehr Informationen auf die Differenz.In kurzen, config.h ist, die typischerweise mit Anführungszeichen, nicht in Spitzen Klammern, und dies sollte den Präprozessor bevorzugen, die config.h von der Projekt-Verzeichnis (das ist normalerweise das, was Sie wollen)
  • Sie sagen, dass ein Teilprojekt werden sollte, einschließlich des einschließenden Projekts config.h Normalerweise ist dies überhaupt nicht das, was Sie wollen.Das Teilprojekt ist standalone und das PAKET und die VERSION, die für das Teilprojekt, nicht deins.Falls Sie libxml in Ihrem xmlreader-Projekt für Beispiel, würden Sie wollen immer noch die libxml-code, kompiliert mit PAKET libxml und VERSION (was auch immer das libxml version ist).
  • Es ist in der Regel ein großer Fehler zu haben config.h werden von öffentlichen Headern. config.h ist immer privat, um Ihr Projekt oder Teilprojekt, und sollte nur berücksichtigt werden, aus .c-Dateien.Also, wenn Ihr in der Dokumentation des Herstellers, sagt, Ihre "Lieferanten.h", und dass die öffentlichen header enthält config.h irgendwie, dann ist das ein Nein-Nein.Ebenso, wenn Ihr Projekt ist eine Bibliothek, nicht enthalten config.h überall von Ihr öffentlich installiert Header.

Andere Tipps

Es ist definitiv ein hack, aber ich post-Prozess die autogen würde config.h Datei:

sed -e 's/.*PACKAGE_.*//' < config.h > config.h.sed && mv config.h.sed config.h

Das ist erträglich in unserer build-Umgebung, aber ich würde gerne eine sauberere Art und Weise.

Es stellt sich heraus, es war eine sehr einfache Lösung in meinem Fall.Der Verkäufer Projekt sammelt mehrere header-Dateien in einen monolithischen header-Datei, die dann #included durch den Verkäufer Quellen.Aber die Regel, baut die monolithische header versehentlich enthalten die generierten config.h.Die Anwesenheit des PAKET, VERSION, etc.config-Variablen in der monolithischen header ist, was verursacht wurde, die Neubestimmung Warnungen.Es stellt sich heraus, dass der Verkäufer config.h irrelevant sei, weil die "config.h" immer gelöst zu $(top_builddir)/config.h.

Ich glaube, dies ist die Art, wie es funktionieren soll.Standardmäßig wird ein Teilprojekt werden sollte, einschließlich des einschließenden Projekts config.h anstatt seine eigenen, soweit das Teilprojekt schließt auch explizit die eigene, oder manipuliert die INCLUDE-Pfad, so dass sein eigenes Verzeichnis vor $(top_builddir), oder anderweitig manipuliert die header-Dateien wie in meinem Fall.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top