2017-05-19 4 views
-1

meine Makefile.am erstellt die ausführbare Datei main: "symplerTest" ich möchte die Dateien "geometry/source/*. O" verlinken. Derzeit bin ich es so verknüpft:autotools: Makefile.am: Link wenn Datei existiert

symplerTest_LDFLAGS = \ 
    ... 
    geometry/source/*.o 

Das funktioniert. Aber jetzt, in einem nächsten Schritt, möchte ich nur verlinken, wenn die Dateien * .o existieren. Ich habe versucht, diese:

if ("$(wildcard $(geometry/source/*.o))","") 
symplerTest_LDFLAGS += geometry/source/*.o 
endif 

aber die folgende Fehlermeldung erhalten:

srcUnittest/Makefile.am:81: error: endif without if 
srcUnittest/Makefile.am:79: warning: wildcard $(geometry/source/*.o: non-POSIX variable name 
srcUnittest/Makefile.am:79: (probably a GNU make extension) 

Das Problem bei ("$ (Platzhalter $ (Geometrie/Quelle/* o))" zu sein scheint, "")

Vielen Dank!

+1

Ich vermute, das ist eine XY-Frage. Warum würden Sie in einem Automake-Projekt '.o'-Dateien für den Linker verwenden? Sind das keine Zwischenziele?Normalerweise würden Sie steuern, welche Objekte in die ausführbare Datei eingebunden sind, indem Sie steuern, welche Quellen ihm zugeordnet sind, und Automake die Details sortieren lassen. Es gibt andere Alternativen, wie zum Beispiel das Erstellen und Verweisen auf Convenience-Bibliotheken, aber wenn Ihre 'Makefile.am' überhaupt irgendetwas über' .o'-Dateien sagt, dann sind Sie sehr wahrscheinlich auf einem suboptimalen Pfad. –

Antwort

0

Sie verwirren die Automake Richtlinie if mit dem Make Richtlinie ifeq,

Die Automake Handbuch bei 20 Conditionals betont:

Automake- eine einfache Art von conditionals unterstützt.

Diese Bedingungen sind nicht identisch mit den Bedingungen in GNU Make. Automake conditionals werden zur Konfigurationszeit vom configure-Skript überprüft und beeinflussen die Übersetzung von Makefile.in in Makefile in . Sie basieren auf den Optionen zur Konfiguration und zu den Ergebnissen, die configure über das Host-System ermittelt hat. GNU Make-Bedingungen werden zum Zeitpunkt der Erstellung überprüft und basieren auf den Variablen , die an das make-Programm übergeben oder im Makefile definiert wurden.

if ist keine Make-Anweisung überhaupt. ifeq ist eine Make-Anweisung, für die gültige Argumente die Form (arg1, arg2) haben können.

ifeq (arg1, arg2) 

Mittel, zu machen, wennarg1istarg2 gleich.

Argumente des Formulars (arg1, arg2) sind ungültig für die Automake-Richtlinie if. Gültige Argumente für die Automake if Direktive sind Automake Condition-Namen, z.

if DEBUG 

Mittel, um Automake, , wenn die vonDEBUGgenannte Bedingung gilt - wo DEBUG ist ein Zustand, Name, den Sie zuvor mittels des AM_CONDITIONAL Makro erstellt haben.

Siehe die verknüpfte Dokumentation.

+0

Vielen Dank für Ihre Antwort! Also gibt es keine Möglichkeit, etwas zu tun, was ich einfach tun möchte? "Link wenn Datei existiert"? –

+1

@mudi_lou John Bollingers Kommentar zu Ihrem Beitrag gilt. Was Sie versuchen, ist die falsche Lösung für ein anderes Problem, das Sie nicht erklärt haben. Sie sollten eine neue Frage zu * diesem * Problem stellen. –

Verwandte Themen