制作说"missing separator"从CuTest源.c文件



我正在尝试开始使用CuTest在C.中进行单元测试

在制作时,我得到以下错误:

dev:~/bistro# make
cutest/CuTest.c:10: *** missing separator.  Stop.

文件cutest/CuTest.c直接来自库。我没有对它做任何修改。以下是相关的行:

08 - #include "CuTest.h"
09 - 
10 - /*-------------------------------------------------------------------------*
11 -  * CuStr
12 -  *-------------------------------------------------------------------------*/
13 - 
14 - char* CuStrAlloc(int size)

以下是我正在使用的Makefile,供完全参考:

NAME = bistro
SOURCES_DIR = src
OBJECTS_DIR = obj
SOURCES = $(shell find $(SOURCES_DIR) -type f -name *.c) cutest/CuTest.c
OBJECTS = $(patsubst $(SOURCES_DIR)/%.c, $(OBJECTS_DIR)/%.o, $(SOURCES))
DEPS    = $(OBJECTS:.o=.d)
CFLAGS = -Wall -Werror -Wextra
COMPILER = gcc -I cutest -I $(SOURCES_DIR) $(CFLAGS)
BISTRO_MAIN = $(OBJECTS_DIR)/bistro/bistro_main.o
.PHONY: test all clean fclean re
all: $(NAME)
# header dependencies
-include $(DEPS)
$(NAME): $(OBJECTS)
    $(COMPILER) -o $(NAME) $(OBJECTS)
test: $(filter-out $(BISTRO_MAIN), $(OBJECTS))
    $(COMPILER) -c all_tests.c -o all_tests.o
    $(COMPILER) -o test $(filter-out $(BISTRO_MAIN), $(OBJECTS)) all_tests.o
    rm -f all_tests.o
$(OBJECTS_DIR)/%.o: $(SOURCES_DIR)/%.c
    @if [ ! -d "$(@D)" ]; then mkdir -p $(@D); fi
    $(COMPILER) -MMD -c $< -o $@
clean:
    rm -Rf $(OBJECTS_DIR)/*
fclean: clean
    rm -f $(NAME)
re: fclean all

此错误消息的原因可能是什么

编辑1:生成文件只缩进4个空格的选项卡。对"find"命令的调用会是造成这种情况的原因吗?另外,错误为什么说.c文件中缺少分隔符?

编辑2:接受的答案显示错误。此外,该调用不起作用,因为它正在搜索*.c,应该是"*.c"

这意味着您使用的是(四个)空格,而不是tab符号。

Make-target的命令必须缩进一个tab

请参阅http://www.gnu.org/software/make/manual/make.html#Rule-简介:

请注意:您需要在每个配方行的开头放一个制表符!这是一种让粗心的人措手不及的晦涩难懂的东西。如果您喜欢在食谱前加上除tab以外的字符,可以将.RECOPEPREFIX变量设置为备用字符


您的错误是因为您在Makefile中包含了一个C源文件。

SOURCES = $(shell find $(SOURCES_DIR) -type f -name *.c) cutest/CuTest.c
OBJECTS = $(patsubst $(SOURCES_DIR)/%.c, $(OBJECTS_DIR)/%.o, $(SOURCES)) # cutest/CuTest.c stays cutest/CuTest.c
DEPS    = $(OBJECTS:.o=.d)
-include $(DEPS) # oops, includes cutest/CuTest.c

最新更新