为什么这个 make 文件只调用一个目标?

Why does this make file only call one target?

我是新手,我正在尝试制作一个超级简单的构建脚本。这是我的:

.PHONY: all main
all:
    mkdir -p build && cd build

main: main.o install
    g++ -o main main.o

main.o: ../src/main.cpp
    g++ -c ../src/main.cpp

.PHONY: install
install: 
    mkdir -p build
    mv main.o build 

.PHONY: clean
clean:
    rm -r build/

我希望它调用 all,然后调用 main。实际上,情况是这样的:

$ make
mkdir -p build && cd build

只调用了allmain不是运行。为什么?在 .PHONY 行的 all 之后,我有 main 作为先决条件。还有帮助?

.PHONY 不是真正的目标(它是一个特殊的 make 构造),并且不会导致其先决条件为 运行。相反,提到的第一个实际目标是 all,如果您只键入 make,它将调用 all 作为默认目标。因为 all 不依赖于任何东西,所以它是唯一的目标 运行.

您可以在最顶部添加一行:

default: all main

这将导致 allmain 变为 运行(不要忘记将 default 添加到 .PHONY。请注意,尽管您是不保证 all 会在 main 之前 运行。如果你想保证这一点,你还必须添加

main: all

这将迫使 allmain

之前变为 运行