提问人:Leo 提问时间:2/16/2023 更新时间:2/16/2023 访问量:36
Makefile:由于缺少分隔符错误,无法编译和链接
Makefile: fail to compile and link due to missing separator error
问:
我编写了一个 Makefile 来编译我的 C 源代码并生成 ,这些文件旨在存储在与源代码所在位置不同的另一个目录中。这是我的 Makefile 的副本:.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)
之后,屏幕显示以下错误消息:make
obj/testmpi.o:1: warning: NUL character seen; rest of line ignored
obj/testmpi.o:1: *** missing separator. Stop.
谁能帮忙调试这个 Makefile 并弄清楚它为什么会发生?
答:
1赞
John Bollinger
2/16/2023
#1
这。。。
-include $(FWI_OBJ:$(OBJ)/.o=$(OBJ)/.d)
...是错误的。替换引用尝试将文件名从该端的 (展开) 转换为以 (展开) 结尾。没有一个文件名以这种方式结束,因此它们都保持不变地传递。因此,尝试访问文件,而不是所需的文件。$(FWI_OBJ)
$(OBJ)/.o
$(OBJ)/.d
$(FWI_OBJ)
make
include
.o
.d
可能你的意思是这样的,相反:
-include $(FWI_OBJ:.o=.d)
评论
0赞
Thomas D.
2/16/2023
谢谢,布林@John。我尝试了你的策略,它奏效了。棒!
评论
include