makefile-target jako zmienna

0

Cześć

Gdzieś słyszałem, że jest możliwość podania targetu jako zmiennej, jednak wywala mi błąd: *** missing separator. Stop.

Mój plik makefile:

EXEC = test01;
CSRC = main.c
COBJ = main.o


CFLAGS = -Wall -std=c11

all:		$(EXEC)
			@echo "Launching..."
			@echo ""
			@./$(EXEC)
		
$(EXEC):	$(COBJ)
			@echo "Linking..."
			$(CC) $? -g -o $@
			@echo "Removing object files..."
			@$(RM) -f *.o
		
$(COBJ):	$(CSRC)
			@echo "Compiling..."
			$(CC) $(CSRC) -c
			
clean:		
			@echo "Cleaning..."
			$(RM) -f *.o $(EXEC)
1

Gdzieś słyszałem, że jest możliwość podania targetu jako zmiennej

Taki opis problemu jest zbyt enigmatyczny, żeby napisać coś więcej niż to, jakie problemy widzę z tym Makefile.

EXEC = test01;

Bez średnika.

CFLAGS = -Wall -std=c11

-std=c++11

$(COBJ): $(CSRC)

To nie zadziała. $(CSRC) musi być gdzieś zdefiniowane jako target, Ty masz tylko zmienną o takiej nazwie, która w dodatku nie jest Ci potrzebna akurat w tym miejscu.

$(CC) $(CSRC) -c

$(CC) to zmienna, pod którą czasem "kryje się" kompilator C, Ty raczej chcesz użyć $(CXX). Pamiętaj, że te zmienne nie zawsze są ustawione, ja preferuje przypisać je jawnie na początku makefile'a.

0

Wszystko działa jak należy.Wystarczyło usunąć średnik w 1 linijce, który nie wiem skąd się wziął.
BTW. W kroku $(EXEC) usuwam pliki obiektowe, bo nie chciałem ich mieć akurat teraz. Gdy są mi potrzebne to daje komentarz i tyle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1