在makefile中看到意外的行尾

在makefile中看到意外的行尾,makefile,Makefile,这是我正在使用的makefile,运行时显示第3行出现意外的行尾,我不确定发生了什么,希望得到解释。首先,检查所有缩进都是真正的制表符,而不是空格。出于愚蠢的历史原因,Make必须使用真正的标签 接下来,$(-std=c99-Wall)是一个问题。由于没有名为-std=c99-Wall的变量,$(-std=c99-Wall)将不会产生任何结果 类似地,$(gcc)也可能是一个问题。除非定义了gcc环境变量,否则该变量将为空。您可能只需要计划gcc。实际上,您可能需要$(CC),这是一种跨平台的方

这是我正在使用的makefile,运行时显示第3行出现意外的行尾,我不确定发生了什么,希望得到解释。

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

接下来,
$(-std=c99-Wall)
是一个问题。由于没有名为
-std=c99-Wall
的变量,
$(-std=c99-Wall)
将不会产生任何结果

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

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

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

因为默认标志的列表通常是合理的,所以我喜欢使用
+=
,这样我可以添加到而不是覆盖我的C标志<例如,code>CFLAGS=-pedanticmake

我还有
OPTIMIZE
separate,这样我就可以正常地调试构建,但之后会为发布做优化构建<代码>进行优化=-O3。这是一个
make
参数,而不是一个环境变量,用于告诉
make
重写Makefile中的硬编码赋值

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

检查所有缩进是否为实制表符,而不是空格。
OPTIMIZE = -g
CFLAGS += -std=c99 -Wall $(OPTIMIZE)

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