我写了一个Makefile来编译我的C源代码,并生成.o
,.d
文件,这些文件旨在存储在不同于.c
源代码所在目录的另一个目录中。
SHELL=/bin/bash
EXEC=./bin
OBJ=./obj
CC=mpicc
CFLAGS=-O3 -Wall
LFLAGS=-lm -lstdc++ -lmpi
$(OBJ)/%.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
$(CC) $(CFLAGS) -MM $*.c > $(OBJ)/$*.d
FWI_OBJ = $(FWI_SRC:%.c=$(OBJ)/%.o)
FWI_SRC = \
testmpi.c \
printneigh.c
fwi2D: $(FWI_OBJ) fd.h
$(CC) $(LFLAGS) $(FWI_OBJ) -o $(EXEC)/xtestmpi
all: fwi2D
.PHONY: clean
clean:
rm -f $(OBJ)/*.o $(OBJ)/*.d $(EXEC)/*
install: clean all
-include $(FWI_OBJ:$(OBJ)/.o=$(OBJ)/.d)
I make
之后,屏幕显示以下错误消息:
obj/testmpi.o:1: warning: NUL character seen; rest of line ignored
obj/testmpi.o:1: *** missing separator. Stop.
有人能帮助调试这个Makefile并找出它发生的原因吗?
1条答案
按热度按时间db2dz4w81#
这个...
...错误。替换引用试图从以
$(OBJ)/.o
结尾的$(FWI_OBJ)
转换文件名(展开后)以$(OBJ)/.d
结尾$(FWI_OBJ)
中的文件名都不是以这种方式结尾的,所以它们都是原封不动地通过的。结果,make
尝试include
.o
文件,不是你想要的.d
文件。也许你指的是这个