Обратите внимание, что каждая строка рецепта make-файла работает в отдельной оболочке, поэтому $?
предыдущей строки недоступно, если вы не используете опцию .ONESHELL
.
Aисправить без .ONESHELL
:
all: hello
.PHONY: all
hello: main.cpp othersrc.cpp
g++ -o $@ -Wall main.cpp othersrc.cpp && echo "Compile succeeded." || (echo "Compile failed!"; false)
с .ONESHELL
:
all: hello
.PHONY: all
SHELL:=/bin/bash
.ONESHELL:
hello:
@echo "g++ -o $@ -Wall main.cpp othersrc.cpp"
g++ -o $@ -Wall main.cpp othersrc.cpp
if [[ $$? -eq 0 ]]; then
echo "Compile succeded!"
else
echo "Compile failed!"
exit 1
fi
Когда необходимо передать $
в команду оболочки, она должна быть заключена в кавычки $$
вmakefile (make
взимает с вас доллар за прохождение одного доллара, в основном).Отсюда $$?
.