0

我有一个包含此内容的 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??

4

2 回答 2

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
于 2013-08-11T08:52:01.767 回答
1

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

这是违反Paul 的 Makefiles 规则之一的结果

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

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

于 2013-08-11T08:51:30.473 回答