【问题标题】:Unexpected end of line seen In makefile在makefile中看到意外的行尾
【发布时间】:2016-12-01 21:41:36
【问题描述】:
all: operation

operation: operation.o operation_functions.o
    $(gcc) $(-std=c99 -Wall) -o operation operation.o operation_functions.o

operation.o: operation.c operation_functions.h
    $(gcc) $(-std=c99 -Wall) -c operation.c

operation_functions.o: operation_functions.c operation_functions.h
    $(gcc) $(-std=c99 -Wall) -c operation_functions.c

test: operation
    operation 7 5 10 15
    operation 0.57 0.9 3.5 9.12
    operation 0 -9 0 -3
    operation 0.467 13 0 -4
    operation 0 8 9 15
    operation 0 0 15 30
    operation 12 0 0 0

clean:
    rm -f *.o operation

这是我正在使用的 makefile,运行时它说在第 3 行中看到了意外的行尾,我不确定发生了什么,希望能得到解释。

【问题讨论】:

  • 检查所有缩进是真正的制表符,而不是空格。

标签: makefile


【解决方案1】:

首先,检查所有缩进是真正的制表符,而不是空格。出于愚蠢的历史原因,Make 必须使用真实标签。

接下来,$(-std=c99 -Wall) 是个问题。 $(foo) is used to refer to the contents of a variable called foo。由于没有名为-std=c99 -Wall 的变量,$(-std=c99 -Wall) 不会产生任何结果。

同样$(gcc) 可能也是一个问题。除非您定义了 gcc 环境变量,否则它将为空。您可能只想要计划gcc。实际上,您可能想要$(CC),这是一种选择合适的 C 编译器的跨平台方式。

$(CC) -std=c99 -Wall -o operation operation.o operation_functions.o

函数的适当用法是将所有 C 编译器标志放入一个变量中,然后使用该变量。这允许您从命令行覆盖它们。

由于默认标志列表通常是合理的,我喜欢使用+=,这样我可以添加而不是覆盖我的 C 标志。以CFLAGS=-pedantic make 为例。

我也有 OPTIMIZE 单独的,所以我可以正常调试构建,然后为发布进行优化构建。 make OPTIMIZE=-O3。这是一个 make 参数,而不是一个环境变量来告诉 make 覆盖 Makefile 中的硬编码赋值。

OPTIMIZE = -g
CFLAGS += -std=c99 -Wall $(OPTIMIZE)

operation: operation.o operation_functions.o
    $(CC) $(CFLAGS) -o operation operation.o operation_functions.o

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多