我有一个奇怪的错误,我设法减少到以下错误。我有一个只有两个空文件的文件夹:一个 Makefile 和一个 cpp 文件:
$ ls -la
total 8
drwxrwxr-x 2 erelsgl erelsgl 4096 Mar 3 20:12 .
drwxrwxr-x 13 erelsgl erelsgl 4096 Mar 3 20:10 ..
-rw-rw-r-- 1 erelsgl erelsgl 0 Mar 3 20:12 Demo.cpp
-rw-rw-r-- 1 erelsgl erelsgl 0 Mar 3 20:09 Makefile
$ cat Makefile
$ cat Demo.cpp
当我运行时,make
我得到了预期的结果:
$ make
make: *** No targets. Stop.
但是当我跑步时,make Demo.o
我得到了一个非常奇怪的结果:
$ make Demo.o
clang++-5.0 -std=c++17 -c -o Demo.o Demo.cpp
make: clang++-5.0: Command not found
<builtin>: recipe for target 'Demo.o' failed
make: *** [Demo.o] Error 127
命令“clang++-5.0 -std=c++17”实际上是几天前在 Makefile 中的,但我早就用 clang++-9 替换了它。现在,如您所见,Makefile 完全是空的。为什么make
仍在运行这些旧命令?
编辑:当我将 Makefile 更改为包含这两行时,也会发生同样的事情:
%.o: %.cpp xxx.h
clang++-9 --compile $< -o $@
当文件 xxx.h 不存在时。这非常令人困惑:我运行make Demo.o
它是用 clang++-5.0 而不是 clang++-9 构建的!