2013-03-24 2 views
1

В make-файле ниже я пытаюсь скомпилировать один каталог, но сделать против моей воли пытается сделать это в неправильном порядке. Он начинается с компиляции main.o, а затем он напрямую переходит на компиляцию консоли. Я понятия не имею, почему он не пытается решить все зависимости до него. Я просто получаю:Makefile - неправильная последовательность компиляции

[email protected]:~/Dokumenty/Sysopy/cw1/zad3b$ make 
gcc -c -Wall -I ./src/include src/main.c 
gcc -o macierze main.o 
main.o: In function `main': 
main.c:(.text+0x28): undefined reference to `wczytaj' 
main.c:(.text+0x31): undefined reference to `wczytaj' 
main.c:(.text+0x7e): undefined reference to `suma' 
... 
collect2: ld returned 1 exit status make: *** [console] Błąd 1 

Вот Makefile:

############ makra ############# 
CC = gcc 
CFLAGS = -Wall -I ./src/include 
LFLAGS = 
VPATH = ./src/operacje: ./src/we_wy: ./src/reszta 

########### pliki ############## 
SRC_CONSOLE = wczytaj_konsola.c wypisz_konsola.c 
SRC_FILE  = wczytaj_plik.c wypisz_plik.c pliki.c 
SRC_FUNCTION = suma.c roznica.c iloczyn.c macierz.c 
HEADERS  = suma.h roznica.h iloczyn.h wypisz.h wczytaj.h macierz.h 
OBJ_SONSOLE = $(SRC_CONSOLE:.c=.o) 
OBJ_FILE = $(SRC_FILE:.c=.o) 
OBJ_FUNCTION = $(SRC_FUNCTIONS:.c=.o) 


console: $(OBJ_CONSOLE) $(OBJ_FUNCTION) main.o 
    $(CC) $(LFLAGS) -o macierze $^ 

file: $(OBJ_FILE) $(OBJ_FUNCTION) main.o 
    $(CC) $(LFLAGS) -o macierze $^ 

console_logs: $(OBJ_CONSOLE) $(OBJ_FUNCTION) main.o 
    $(CC) $(LFLAGS) -o macierze $^ 

file_logs: $(OBJ_FILE) $(OBJ_FUNCTION) main.o 
    $(CC) $(LFLAGS) -o macierze $^ 

############# objekty ############## 
main.o: 
    $(CC) -c $(CFLAGS) src/main.c 

$(OBJ_CONSOLE): $(SRC_CONSOLE) 
    $(CC) -c $(CFLAGS) $^ 

$(OBJ_FILE): $(SRC_FILE) 
    $(CC) -c $(CFLAGS) $^ 

$(OBJ_FUNCTION): $(SRC_FUNCTION) 
    $(CC) -c $(CFLAGS) $^ 



%logs : LFLAGS += -D KOMUNIKATY 
file% : LFLAGS += -D PLIKI 

./PHONY: clean 
clean: 
    rm -f *.o 
    rm -f ./src/include/*.gch 
    rm -f macierze 

ответ

1

Вы пишете: OBJ_FUNCTION = $ (SRC_FUNCTIONS: .c = .o) вместо: OBJ_FUNCTION = $ (SRC_FUNCTION: .c = .o)

и

OBJ_SONSOLE = $ (SRC_CONSOLE: .c = .o) вместо OBJ_CONSOLE = $ (SRC_CONSOLE: .c = .o)

+0

Это была только эта и следующая ошибка OBJ_SONSOLE. – Dcortez

+0

Всегда запускайте _make_ с '--warn-undefined-variables'. – bobbogo

Смежные вопросы