627 Stimmen

Was bedeuten die makefile-Symbole $@ und $<?

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

Was bedeuten die $@ y $< was genau tun?

2voto

Aominé Punkte 426

Z.B. wenn Sie die Quellen kompilieren wollen, aber Objekte in einem anderen Verzeichnis haben:

Das müssen Sie tun:

gcc -c -o <obj/1.o> <srcs/1.c> <obj/2.o> <srcs/2.c> ...

aber bei den meisten Makros ist das Ergebnis alle Objekte, gefolgt von allen Quellen, wie :

gcc -c -o <all OBJ path> <all SRC path>

also wird dies nichts kompilieren ^^ und Sie werden nicht in der Lage sein, Ihre Objektdateien in ein anderes Verzeichnis zu legen :(

die Lösung ist die Verwendung dieser speziellen Makros

$@ $<

Dies erzeugt eine .o-Datei (obj/file.o) für jede .c-Datei im SRC (src/file.c)

$(OBJ):$(SRC)
   gcc -c -o $@ $< $(HEADERS) $(FLAGS)

bedeutet dies:

    $@ = $(OBJ)
    $< = $(SRC)

sondern zeilenweise INSTEAD aller Zeilen von OBJ gefolgt von allen Zeilen von SRC

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X