更新:制表错误已得到修复。 因此,我将更改此问题的范围以将焦点放在错误2上。由于存在一些有价值的讨论,因此我希望保留同一篇文章。
我正在尝试在Windows上运行此Makefile,但出现错误“缺少分隔符”。我做了一些谷歌搜索,似乎此问题源于使用空格而不是制表符。我在notepad ++中打开了文件,似乎所有选项卡都正确放置了。是否还有另一个语法问题会引发此错误?应该注意的是,这在Ubuntu 18.04上可以很好地编译,因此我不确定是什么问题。
此处的代码:
# where the executables should be installed:
BIN = $HOME/bin
# define your compiler here:
CC = gcc
# define your copy command here:
COPY = cp
# define your remove (or delete) command here:
RM = rm -f
# suffix of object files? (o for unix, obj for MSDOS):
O = o
# suffix for executable files? (empty for unix, .exe for dos):
E =
# command line arguments for C compiler
WARN := \
-Wall \
-Wcast-align \
-Wcast-qual \
-Wmissing-declarations \
-Wmissing-prototypes \
-Wpointer-arith \
-Wstrict-prototypes \
-Wno-unused-parameter \
-Wno-unused-function \
-Wshadow \
-Wundef \
-Wwrite-strings
OPT1 = -DNDEBUG
#OPT2 = -O
CFLAGS = -g $(WARN) $(OPT1) $(OPT2)
#
# There should be no need to make changes below this line
#
TARGETS = abcml$(E) abcsim$(E) tabcfg$(E) mau2cfg$(E) cplcfg$(E) gnaw$(E) \
wgtcfg$(E)
#make all targets
all : $(TARGETS)
touch all
#target wgtcfg: Weight the configurations in a .cfg file
WGTCFG = wgtcfg.$(O) getcic.$(O) io.$(O) header.$(O) misc.$(O) zeroin.$(O)
wgtcfg$(E) : $(WGTCFG)
$(CC) $(CFLAGS) -o $@ $(WGTCFG) -lm
#target gnaw: subject an assemblage to attrition
GNAW = gnaw.$(O) getcic.$(O) io.$(O) header.$(O) misc.$(O) zeroin.$(O) \
unirand.$(O)
gnaw$(E) : $(GNAW)
$(CC) $(CFLAGS) -o $@ $(GNAW) -lm
#target cplcfg: Calculate complement of .cfg file
CPLCFG = cplcfg.$(O) getcic.$(O) io.$(O) header.$(O) misc.$(O) zeroin.$(O)
cplcfg$(E) : $(CPLCFG)
$(CC) $(CFLAGS) -o $@ $(CPLCFG) -lm
#target mau2cfg: convert .mau format to .cfg format
MAU2CFG = mau2cfg.$(O) getcic.$(O) misc.$(O) io.$(O) header.$(O) zeroin.$(O)
mau2cfg$(E) : $(MAU2CFG)
$(CC) $(CFLAGS) -o $@ $(MAU2CFG) -lm
#target abcsim: simulation program
ABCSIM = abcsim.$(O) getcic.$(O) zeroin.$(O) misc.$(O) io.$(O) unirand.$(O) \
header.$(O)
abcsim$(E) : $(ABCSIM)
$(CC) $(CFLAGS) -o $@ $(ABCSIM) -lm
#target abcml: estimation program
ABCML = abcml.$(O) io.$(O) getcic.$(O) zeroin.$(O) misc.$(O) likelihood.$(O) \
prlike.$(O) chol.$(O) amoeba.$(O) symeig.$(O) unirand.$(O) header.$(O) \
ninfomat.$(O)
abcml$(E) : $(ABCML)
$(CC) $(CFLAGS) -o $@ $(ABCML) -lm
#target tabcfg: tabulate configurations
TABCFG = tabcfg.$(O) getcic.$(O) misc.$(O) io.$(O) header.$(O) zeroin.$(O)
tabcfg$(E) : $(TABCFG)
$(CC) $(CFLAGS) -o $@ $(TABCFG) -lm
install : all
$(COPY) $(TARGETS) $(BIN)
clean :
$(RM) *.$(O) *~ all bone junk* core abcmlsrc.zip try depend $(TARGETS)
abcmlsrc.zip :
zip -l abcmlsrc LICENSE Makefile.dos Makefile.unix *.c *.h -x try.*
depend :
echo '#Automatically generated dependency info' > depend
$(CC) -M *.c >> depend
include depend
编辑:好的,因此,修复依赖文件中的错误会导致另一个奇妙的错误,如下图所示(普通话指出: “该系统找不到指定的文件”)。现在,修复依赖文件可以使其使用WSL正确编译,但是PowerShell仍然不满意。我应该尝试使用其他编译器吗?我的目标是从运行make来获取可执行文件,以便我可以对其进行处理。
gcc -g -Wall -Wcast-align -Wcast-qual -Wmissing-declarations -Wmissing-prototypes -Wpointer-arith -Wstrict-prototypes -Wno-unused-parameter -Wno-unused-function -Wshadow -Wundef -Wwrite-strings -DNDEBUG -c -o wgtcfg.o wgtcfg.c
process_begin: CreateProcess(NULL, gcc -g -Wall -Wcast-align -Wcast-qual -Wmissing-declarations -Wmissing-prototypes -Wpointer-arith -Wstrict-prototypes -Wno-unused-parameter -Wno-unused-function -Wshadow -Wundef -Wwrite-strings -DNDEBUG -c -o wgtcfg.o wgtcfg.c, ...) failed.
make (e=2): 系统找不到指定的文件。
make: *** [<builtin>: wgtcfg.o] Error 2