尝试使用其中包含 ifmakefile
的run
规则创建一个。
当我运行命令make run
时,它返回此错误:
/bin/sh: 1: Syntax error: end of file unexpected (expecting "then")
该文件的名称是Makefile
. 我能做些什么?(我Makefile
用 Vim 编辑器创建了这个,Vim 的格式已经设置为 unix)。
这是代码的一部分:
#!bin/bash
#other rules
run:
if ls exec &>/dev/null
then
gcc -o exec file1.o file2.o
./exec
else
./exec
fi
如果
if
您想检查exec
.以这种方式将 shell 代码混合到 Makefile 中几乎肯定不会按您期望的方式工作(如果它完全有效的话)。
特别是,每个 shell 命令行都将在其自己的子 shell 中执行 -
/bin/sh
默认情况下使用 - 因此你会看到类似的错误尽管
/bin/sh
有#!/bin/bash
shebang(这make
将被视为纯粹的评论)。由于 的全部目的
make
是测试先决条件的存在和修改状态,因此您可以定义一个run
目标,如果它不存在或已过期,则有条件地构建其可执行先决条件,如下所示:注意:我命名了可执行程序
executable
,因为名称exec
与内置的 shell 名称冲突。或者,更惯用地说,使用
make
's 的自动变量作为目标和先决条件:测试
make -n
: