make输出与Makefile不同

时间:2013-08-11 08:22:45

标签: g++ makefile

我有一个包含此内容的Makefile

$ cat Makefile
all: locality
locality: src/locality.o
    g++ src/locality.o -o locality

locality.o: src/locality.cpp
    g++ -O3  -c src/locality.cpp

clean:
    rm -rf src/*.o locality

然而,当我运行make时,我看到一些略有不同的输出!

$ make clean
rm -rf src/*.o locality

$ make
g++    -c -o src/locality.o src/locality.cpp
g++ src/locality.o -o locality

那么-O3 ??

在哪里

2 个答案:

答案 0 :(得分:2)

你绊倒了GNU make中的内置规则,即%.o: %.c。请改用$CFLAGS

CFLAGS=-O3

all: locality
locality: src/locality.o
    g++ src/locality.o -o locality

clean:
    rm -rf src/*.o locality

答案 1 :(得分:1)

Make正在使用隐式规则来创建src/locality.o因为您没有规则(您在当前目录中只有locality.o的规则,而不是src

这是违反Paul's rules of Makefiles之一的原因:

  

每个非.PHONY规则必须使用其目标的确切名称更新文件。

为此,您应该在规则中使用$@来指定目标文件。