在包中使用Makefile

在包中使用Makefile,makefile,debian,Makefile,Debian,我正在尝试创建一个Makefile,它将创建一个文件夹并从GIT克隆存储库 我很难把所有的东西放在一起,所以我从一个通用的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

我正在尝试创建一个Makefile,它将创建一个文件夹并从GIT克隆存储库

我很难把所有的东西放在一起,所以我从一个通用的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.

此外,这是执行此任务的正确方法吗?

您拥有的不是生成文件。它实际上是一个用makefile语法编写的shell脚本(并且,正如您从错误中发现的,不是正确的makefile语法)

Make是一种工具,它允许运行命令来更新一组目标文件,或者在不需要更新任何目标文件时,根据目标文件及其必备文件的时间戳比较不运行命令。这些依赖关系可以链接起来

这就是我们的目的

典型的例子是编译一个程序:如果任何源文件已经被修改,那么您需要重新编译这些源的目标文件;如果更新了对象文件,则可能需要重新创建库;如果更新了对象或库文件,则可能需要重新链接程序

如果您的问题空间没有映射到该机制,或者无法使其映射到该机制,那么make和makefile就不是您想要的工作的正确工具。根据您对问题的描述,make不是适合此工作的工具

您应该只编写一个shell脚本,就像您在这里已经基本完成的那样,然后继续前进


如果您确实想编写一个makefile,那么您应该花一些时间了解makefiles的语法以及它们是如何工作的,而不仅仅是搜索堆栈溢出并尝试根据答案组合一个makefile。例如,尝试至少阅读。

的简介,您拥有的不是生成文件。它实际上是一个用makefile语法编写的shell脚本(并且,正如您从错误中发现的,不是正确的makefile语法)

Make是一种工具,它允许运行命令来更新一组目标文件,或者在不需要更新任何目标文件时,根据目标文件及其必备文件的时间戳比较不运行命令。这些依赖关系可以链接起来

这就是我们的目的

典型的例子是编译一个程序:如果任何源文件已经被修改,那么您需要重新编译这些源的目标文件;如果更新了对象文件,则可能需要重新创建库;如果更新了对象或库文件,则可能需要重新链接程序

如果您的问题空间没有映射到该机制,或者无法使其映射到该机制,那么make和makefile就不是您想要的工作的正确工具。根据您对问题的描述,make不是适合此工作的工具

您应该只编写一个shell脚本,就像您在这里已经基本完成的那样,然后继续前进

如果您确实想编写一个makefile,那么您应该花一些时间了解makefiles的语法以及它们是如何工作的,而不仅仅是搜索堆栈溢出并尝试根据答案组合一个makefile。例如,尝试至少阅读.p>和
$(shell…
构造的介绍,将shell命令输出替换到makefile中。当然,在调用
mkdir
或调用git之后,输出不是有效的makefile

您的makefile应该是这样的

all:
    mkdir -p myDir
    ./git.sh
请注意,
all:
之后的缩进必须使用制表符完成

看起来你的任务不需要
make
。仅使用shell脚本就足够了。

使用
$(shell…
构造将shell命令输出替换到makefile中。当然,在调用
mkdir
或调用git之后,输出不是有效的makefile

您的makefile应该是这样的

all:
    mkdir -p myDir
    ./git.sh
请注意,
all:
之后的缩进必须使用制表符完成


看起来你的任务不需要
make
。只是shell脚本就足够了。

到目前为止,你的问题不涉及Debian包,考虑删除<代码> Debian < /Case> TAGI,认为你误解了什么是有用的。您描述的任务(“创建文件夹和克隆存储”)将不会从使用make中受益(当然,这可以通过makefile完成)。您的makefile没有目标!难怪它失败了……到目前为止,你的问题不涉及Debian软件包,考虑删除<代码> Debian < /Case> TAGI,认为你误解了什么是有用的。您描述的任务(“创建文件夹和克隆存储”)将不会从使用make中受益(当然,这可以通过makefile完成)。您的makefile没有目标!难怪它失败了。。。