使用Makefile for Debain包

时间:2017-12-26 12:13:27

标签: makefile debian

我正在尝试组建一个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 个答案:

答案 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脚本即可。