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行看到的意外结束时我不确定它们是什么,并且会喜欢解释。
答案 0 :(得分:1)
首先,检查所有缩进是真正的标签,而不是空格。为了愚蠢的历史原因,必须使用真正的标签。
接下来,$(-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