我正在尝试组建一个Makefile,它将从GIT创建一个文件夹并克隆存储库
我无法将它们放在一起所以我开始使用通用的Makefile
我的makefile:
$(shell mkdir -p myDir)
$(shell git.sh)
我试图调用的shell脚本
#!/bin/sh
REPOSRC="my bitbucket repo URL"
LOCALREPO="myDir"
# We do it this way so that we can abstract if from just git later on
LOCALREPO_VC_DIR=$LOCALREPO/.git
if [ ! -d $LOCALREPO_VC_DIR ]
then
git clone $REPOSRC $LOCALREPO
else
cd $LOCALREPO
git pull $REPOSRC
fi
# End
当我运行make时,我收到以下错误:
Makefile:2: *** missing separator. Stop.
另外,这是执行此任务的正确方法吗?
2 回答
使用
$(shell ...)
构造,您可以将shell命令输出替换为makefile . 当然在调用mkdir
或调用git之后,输出不是有效的makefile .你的makefile应该是这样的
请注意,
all:
之后的缩进必须使用制表符完成 .看起来你的任务不需要
make
. 只是shell脚本就足够了 .你拥有的不是一个makefile . 它实际上是用makefile语法编写的shell脚本(并且,正如您从错误中发现的那样,不正确的makefile语法) .
Make是一个工具,允许运行命令来更新一组目标文件,或者在不需要更新任何目标文件的情况下运行,基于比较目标文件及其先决条件文件的时间戳 . 可以链接这些依赖关系 .
所有这一切都是为了 .
原型示例是编译程序:如果任何源文件已被修改,那么您需要重新编译这些源的目标文件;如果更新目标文件,则可能需要重新创建库;如果更新了对象或库文件,则可能需要重新链接程序 .
如果您的问题空间没有映射,或者无法映射到该机制,那么make和makefile不是您所考虑的工作的正确工具 . 根据您对问题的描述,make不适合这项工作 .
你应该只编写一个shell脚本,就像你已经基本完成的那样,并继续前进 .
如果你想编写一个makefile,你应该花一些时间来理解makefile的语法及其工作方式,而不是仅仅搜索Stack Overflow并尝试根据答案组合一个makefile . 例如,尝试至少阅读GNU make manual的介绍 .