C Makefile-错误的编译顺序
在下面的makefile中,我试图编译一个目录,但make违背了我的意愿,试图以错误的顺序进行编译。它从编译main.o开始,然后直接进入编译控制台。我不知道为什么它不在它之前解决所有的依赖关系。我刚刚得到: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
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--警告未定义的变量
。