makefile-target jako zmienna

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:

Kopiuj
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)
hauleth
Czemu w kroku $(EXEC) usuwasz wszystkie pliki *.o? To bez sensu.
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 4 godziny
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.


edytowany 2x, ostatnio: several
MarekR22
tam jest CFLAGS, a nie CPPFLAGS taks samo źródła ma w c a nie w c++/
hauleth
"$(CSRC) musi być gdzieś zdefiniowane jako target" otóż nie, jeśli nie jest to target, to będzie szukało pliku z taką nazwą i na bazie jego timestampa będzie decydowało, czy jest potrzebna rekompilacja.
several
Racja, tak to jest jak się pisze na szybko.
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.

hauleth
One zawsze powinny być Ci potrzebne, bo to one decydują ile projektu musisz przekompilować. W związku z tym, że ty je usuwasz, to każda zmiana w dowolnym pliku będzie powodowała rekompilację wszystkiego, nie ważne czy trzeba czy nie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.