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

时间:2015-08-11 18:27:36

标签: makefile gnu-make

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

.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

仅调用all并且未运行main。为什么?我在mainall之后作为先决条件.PHONY。并帮忙?

1 个答案:

答案 0 :(得分:2)

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

您可以在最上方添加一行:

default: all main

会导致allmain同时运行(请不要忘记将default添加到.PHONY。请注意,您无法保证{{1}将在main之前运行。如果你想保证这一点,你还需要添加

all

会强制main: allall

之前运行