C Makefile-错误的编译顺序

C Makefile-错误的编译顺序,c,makefile,C,Makefile,在下面的makefile中,我试图编译一个目录,但make违背了我的意愿,试图以错误的顺序进行编译。它从编译main.o开始,然后直接进入编译控制台。我不知道为什么它不在它之前解决所有的依赖关系。我刚刚得到: user@ubuntu:~/Dokumenty/Sysopy/cw1/zad3b$ make gcc -c -Wall -I ./src/include src/main.c gcc -o macierze main.o main.o: In function `main': m

在下面的makefile中,我试图编译一个目录,但make违背了我的意愿,试图以错误的顺序进行编译。它从编译main.o开始,然后直接进入编译控制台。我不知道为什么它不在它之前解决所有的依赖关系。我刚刚得到:

user@ubuntu:~/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
下面是一个生成文件:

############ 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

编写:OBJ_函数=$(SRC_函数:.c=.o) 而不是:OBJ_函数=$(SRC_函数:.c=.o)

OBJ_SONSOLE=$(SRC_控制台:.c=.o)
而不是OBJ_CONSOLE=$(SRC_CONSOLE:.c=.o)

您编写:OBJ_函数=$(SRC_函数:.c=.o) 而不是:OBJ_函数=$(SRC_函数:.c=.o)

OBJ_SONSOLE=$(SRC_控制台:.c=.o)
不是OBJ_CONSOLE=$(SRC_CONSOLE:.c=.o)

而是OBJ_SONSOLE上的这一个和下一个错误。总是用
运行make--警告未定义的变量
。只是OBJ_SONSOLE上的这一个和下一个错误。总是用
运行make--警告未定义的变量