我想在Makefile中包含一些条件语句:
SHELL=/bin/bash
all:
$(g++ -Wall main.cpp othersrc.cpp -o hello)
@if [[ $? -ne -1 ]]; then \
echo "Compile failed!"; \
exit 1; \
fi
但是出现错误:
/ bin / bash:-c:第0行:预期条件二进制运算符/ bin / bash: -c:第0行:如果[[-ne -1]],则
-1' /bin/bash: -c: line 0:
附近的语法错误;然后\'makefile:3:目标'all'的配方失败make:*** [all]错误1
如何解决?
答案 0 :(得分:2)
请注意,makefile配方的每一行都在不同的shell中运行,因此除非您使用.ONESHELL
选项,否则上一行的$?
不可用。
没有.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
当需要将$
传递给shell命令时,它必须在makefile中用$$
引用(make
要求您为传递1美元而收取1美元)。因此$$?
。