将bash脚本嵌入到makefile中

时间:2018-11-29 14:20:05

标签: linux bash ubuntu gcc makefile

我想在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

如何解决?

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美元)。因此$$?