首页 文章

使用Makefile for Debain包

提问于
浏览
0

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

  • 1

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

    你的makefile应该是这样的

    all:
        mkdir -p myDir
        ./git.sh
    

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

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

  • 1

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

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

    所有这一切都是为了 .

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

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

    你应该只编写一个shell脚本,就像你已经基本完成的那样,并继续前进 .

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

相关问题