【问题标题】:Make says "missing separator" for source .c file from CuTestMake 对来自 CuTest 的源 .c 文件说“缺少分隔符”
【发布时间】:2013-08-13 22:51:48
【问题描述】:

我正在尝试开始使用 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: makefile 缩进只有 4 个空格的制表符。对“查找”命令的调用可能是造成这种情况的原因吗?另外,为什么错误说缺少的分隔符在 .c 文件中?

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

【问题讨论】:

  • 出现此错误消息的可能原因是,makefile 包含用于缩进的空格,而不是制表符。
  • makefile 缩进只有 4 个空格的制表符。对“查找”命令的调用可能是造成这种情况的原因吗?另外,为什么错误说缺少的分隔符在 .c 文件中?

标签: makefile gnu-make


【解决方案1】:

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

Make 目标的命令必须以tab 缩进。

http://www.gnu.org/software/make/manual/make.html#Rule-Introduction:

请注意:您需要在每个配方行的开头放置一个制表符!这是一个晦涩难懂的东西。如果您更喜欢使用制表符以外的字符作为食谱的前缀,则可以将 .RECIPEPREFIX 变量设置为备用字符


你的错误是因为你在 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

【讨论】:

  • Makefile 缩进只有 4 个空格的制表符。我也将此添加到问题中,以便新读者可以立即看到它。感谢您的帮助:-)
猜你喜欢
  • 2012-02-13
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2011-03-19
相关资源
最近更新 更多