使用Makefile for Debian软件包

问题描述 投票:0回答:2

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

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

makefile debian
2个回答
1
投票

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

Make是一个工具,允许运行命令来更新一组目标文件,或者在不需要更新任何目标文件的情况下运行,基于比较目标文件及其先决条件文件的时间戳。可以链接这些依赖关系。

所有这一切都是为了。

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

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

您应该只编写一个shell脚本,因为您已基本完成此操作,并继续前进。

如果你想编写一个makefile,你应该花一些时间来理解makefile的语法及其工作方式,而不是仅仅搜索Stack Overflow并尝试根据答案组合一个makefile。例如,尝试至少阅读GNU make manual的介绍。


1
投票

使用$(shell ...)构造,您可以将shell命令输出替换为makefile。当然在调用mkdir或调用git之后,输出不是有效的makefile。

你的makefile应该是这样的

all:
    mkdir -p myDir
    ./git.sh

请注意,all:之后的缩进必须使用制表符。

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

© www.soinside.com 2019 - 2024. All rights reserved.