我是新手,我正在尝试制作一个超级简单的构建脚本。这就是我所拥有的:
.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
。为什么?我在main
行all
之后作为先决条件.PHONY
。并帮忙?
答案 0 :(得分:2)
.PHONY
不是真正的目标(它是一个特殊的make构造),并且不会导致其先决条件被运行。相反,提到的第一个真实目标是all
,如果您只键入make
,它将调用all
作为默认目标。因为all
不依赖于任何东西,所以它是唯一运行的目标。
您可以在最上方添加一行:
default: all main
会导致all
和main
同时运行(请不要忘记将default
添加到.PHONY
。请注意,您无法保证{{1}将在main之前运行。如果你想保证这一点,你还需要添加
all
会强制main: all
在all