Hier ist meine Makefile:Wie löst man dieses Verknüpfungsproblem in Makefile?
DIR=..
ARG=$(QUERY_STRING)
MAIN=main
SRC_DIR=$(DIR)/src
BIN_DIR=$(DIR)/bin
INC_DIR=$(DIR)/inc
LIB_DIR=$(DIR)/lib
LIBS=markdown
all: $(MAIN) exec
$(MAIN): $(MAIN).o
$(LD) $^ -L $(LIB_DIR) -l $(LIBS) -o $(BIN_DIR)/[email protected]
$(MAIN).o: $(SRC_DIR)/$(MAIN).c
$(CC) $^ -I $(INC_DIR) -o [email protected]
exec:
$(BIN_DIR)/$(MAIN) $(ARG)
clean:
rm -f *.o core.* $(BIN)/$(MAIN)
Es ist klar definiert, wie mein Projekt organisiert ist, also werde ich es nicht erklären. Es läßt sich ohne Probleme, aber auf binäre Ausführung $(BIN_DIR)/$(MAIN)
der folgende Fehler angezeigt:
../bin/main: error while loading shared libraries: rintf: cannot open shared object file: No such file or directory
make: *** [exec] Error 127
Welche Bibliothek ist rintf
gehören? Ich habe versucht, auch -lc
zu verbinden, aber das löst das Problem nicht.
Ist etwas falsch mit meinem Makefile
? Oder sollte ich etwas extra mit $(MAIN)
verknüpfen?
Vielen Dank im Voraus für Ihre Antworten.
+1. Außerdem ist die 'all: $ (MAIN) exec'-Regel unklug; Make verspricht nicht, die Voraussetzungen eines Ziels in der Reihenfolge von links nach rechts zu erstellen. Besser: 'all: exec' und' exec: $ (MAIN) '. – Beta
@Beta: Ja, du hast Recht. Persönlich mag ich Makefiles nicht besonders, die Programme automatisch ausführen, die gebaut worden sind, aber das könnte ein altes fogy Denken sein. Es hängt, teilweise, davon ab, was die Ausführung tut, nehme ich an; Unit-Test oder Regressionstest macht Sinn - und das ist wahrscheinlich, was es hier ist. Und ich habe viele Gegenbeispiele aus der Arbeit im Büro. –