【发布时间】:2019-05-01 15:18:41
【问题描述】:
我想在 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: line 0: 需要条件二元运算符 /bin/bash: -c:第 0 行:
-1' /bin/bash: -c: line 0:if [[ -ne -1 ]] 附近的语法错误;然后 \' makefile:3: 目标 'all' 的配方失败 make: *** [all] 错误 1
如何解决?
【问题讨论】:
-
确认,不!如果 g++ 失败,Make 的通常行为是让 g++ 写入其错误消息然后中止。看起来您正试图抑制正常行为并将几乎无用的错误消息写入错误的输出流!只需调用 g++,让它自己编写错误信息,然后让 make 检查返回值并中止。
-
@williampursell 错误消息不会被禁止
-
我似乎没有必要通过设置
SHELL = /bin/bash来限制makefile 的可移植性,这样您就可以使用[[ ... ]]表单条件......为什么不使用POSIX sh-compliantif [ $$? -eq 0 ]; ...而不是麻烦重置SHELL?
标签: linux bash ubuntu gcc makefile