我正在尝试组建一个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.
另外,这是完成此任务的正确方法吗?
答案 0 :(得分:1)
你拥有的不是一个makefile。它实际上是用makefile语法编写的shell脚本(并且,正如您从错误中发现的那样,不是正确的makefile语法)。
Make是一个工具,允许运行命令来更新一组目标文件,或者如果任何目标文件不需要更新,则不运行,基于比较目标文件及其目标文件的时间戳必备文件。可以链接这些依赖关系。
所有的所有是为了。
原型示例是编译程序:如果任何源文件已被修改,则需要重新编译这些源的目标文件;如果更新目标文件,则可能需要重新创建库;如果更新了对象或库文件,则可能需要重新链接程序。
如果您的问题空间没有映射,或者无法映射到该机制,那么make和makefiles不是您正在考虑的工作的正确工具。根据您对问题的描述,make不适合这项工作。
你应该写一个shell脚本,因为你已经在这里基本完成了,然后继续前进。
如果你想编写一个makefile,你应该花一些时间来理解makefile的语法及其工作方式,而不是仅仅搜索Stack Overflow并尝试根据答案组合一个makefile。例如,尝试至少阅读GNU make manual的介绍。
答案 1 :(得分:1)
使用$(shell ...)
构造,将shell命令输出替换为makefile。当然在调用mkdir
或调用git之后,输出不是有效的makefile。
你的makefile应该是这样的
all:
mkdir -p myDir
./git.sh
请注意all:
之后的缩进与标签一起完成。
看起来您的任务不需要make
。只需shell脚本即可。