Make失败,因为在项目从git移动到SVN时调用git

Make失败,因为在项目从git移动到SVN时调用git,git,svn,makefile,Git,Svn,Makefile,我试图编译的项目之前在Git存储库中,通过在Ubuntu Linux终端中调用make进行编译。现在,我将项目移动到Subversion存储库,当我从终端调用make时,出现一个错误: fatal: Not a git repository (or any parent up to mount point /home) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). FWVersion: 0.

我试图编译的项目之前在Git存储库中,通过在Ubuntu Linux终端中调用
make
进行编译。现在,我将项目移动到Subversion存储库,当我从终端调用
make
时,出现一个错误:

fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). 
FWVersion: 0.00-re8k-hal-2014-08-15 
BuildTag:
这非常有趣,因为
make
不应该是一个存储库导向的工具!我对make文件做了一些研究,并在其中一个文件中找到了单词
git
;我想这就是造成我问题的依赖性

然而,真正的问题是,我不知道如何编辑makefiles,因此也不知道如何纠正这个问题(前提是问题是makefiles中提到的这个
git

生成文件 Makerules.mk
BUILDTAG=$(shell git descripe--all--long | tr“-“| awk”{print$$2“-“$$3}”)行可能是您的问题

您需要想出一些其他方法来定义make变量并在那里使用它(或者如果您不再需要它,则完全删除该变量)。

BUILDTAG=$(shell git descripe--all--long | tr“-”“awk'{print$$2“-$$3}')
行可能是您的问题


您需要想出一些其他方法来定义make变量并在那里使用它(或者如果不再需要它,则完全删除该变量)。

导致
致命的问题:不是git存储库…
肯定是调用
git
命令。在您的示例中,只有一个对
git
的调用,即在
Makerules.mk
中设置
BUILDTAG
变量时:

BUILDTAG = $(shell git describe --all --long | tr "-" " " | awk '{ print $$2 "-" $$3 }')
ALL_CCPPFLAGS   = -Isrc -I ../../common/include -D AUTO_GEN_BUILD_TAG='"${BUILDTAG}"' -D AUTO_GEN_FIRWMARE_VERSION='"${FIRWMARE_VERSION}"' -g -fPIC -I../../kernel/packages/linux/include
您可以使用
BUILDTAG

  • printversion
    中,在
    Makefile
    中设置目标,您只需
    将其回显到终端,然后
  • Makerules.mk
    中设置所有\u CCPPFLAGS
    变量时:

    BUILDTAG = $(shell git describe --all --long | tr "-" " " | awk '{ print $$2 "-" $$3 }')
    
    ALL_CCPPFLAGS   = -Isrc -I ../../common/include -D AUTO_GEN_BUILD_TAG='"${BUILDTAG}"' -D AUTO_GEN_FIRWMARE_VERSION='"${FIRWMARE_VERSION}"' -g -fPIC -I../../kernel/packages/linux/include
    
从它的名称和内容来看,我假设
所有的\u CCPPFLAGS
都包含GCC参数。选项
-D
在GCC中定义了一个预处理器宏,在本例中为
自动生成标记。您可以在源文件中找到它的用途,并决定是否仍然需要该宏

如果不是,请删除它的所有用途,从
所有CCPPFLAGS
的定义中删除
-D AUTO\u GEN\u BUILD\u TAG='“${BUILDTAG}”
,删除带有
BUILDTAG
的行,并删除
Makefile
echo
编辑的行

如果仍然需要,则必须将其内容设置为其他内容<代码>$(shell…
在shell中执行
,可能是Bash。(有关更多信息,请参阅。)
git descripe
命令可从您当前所在的分支(HEAD)找到可访问的最新标记
--all
启用搜索,即使在非真标记的对象中也是如此
--long
确保输出的格式。引用Git 1.7.2.3手册:

--long
    Always output the long format (the tag, the number of commits and
    the abbreviated commit name) even when it matches a tag. This is
    useful when you want to see parts of the commit object name in
    "describe" output, even when the commit in question happens to be a
    tagged version. Instead of just emitting the tag name, it will
    describe such a commit as v1.2-0-gdeadbee (0th commit since tag
    v1.2 that points at object deadbee....).
从示例中的
v1.2-0-gdeadbee
开始,
tr…| awk…
管道将生成
0-gdeadbee
,即自标记指向的对象的ID的最后一个标记、连字符、字母g和前七个字符以来的提交数


从现在起,你就得靠自己了。如何调整“自动生成”标记的值取决于它的用途以及您现在如何分配版本号。SVN使用不同的版本号约定。如果您知道如何在shell中获取其值,只需将管道粘贴到
BUILDTAG
定义中,而不是原始命令(
BUILDTAG=$(shell…
)。只需确保将所有美元符号加倍,否则它们将被解释为make变量。

导致
致命的问题:不是git存储库…
肯定是调用
git
命令。在您的示例中,只有一个对
git
的调用,即在
Makerules.mk
中设置
BUILDTAG
变量时:

BUILDTAG = $(shell git describe --all --long | tr "-" " " | awk '{ print $$2 "-" $$3 }')
ALL_CCPPFLAGS   = -Isrc -I ../../common/include -D AUTO_GEN_BUILD_TAG='"${BUILDTAG}"' -D AUTO_GEN_FIRWMARE_VERSION='"${FIRWMARE_VERSION}"' -g -fPIC -I../../kernel/packages/linux/include
您可以使用
BUILDTAG

  • printversion
    中,在
    Makefile
    中设置目标,您只需
    将其回显到终端,然后
  • Makerules.mk
    中设置所有\u CCPPFLAGS
    变量时:

    BUILDTAG = $(shell git describe --all --long | tr "-" " " | awk '{ print $$2 "-" $$3 }')
    
    ALL_CCPPFLAGS   = -Isrc -I ../../common/include -D AUTO_GEN_BUILD_TAG='"${BUILDTAG}"' -D AUTO_GEN_FIRWMARE_VERSION='"${FIRWMARE_VERSION}"' -g -fPIC -I../../kernel/packages/linux/include
    
从它的名称和内容来看,我假设
所有的\u CCPPFLAGS
都包含GCC参数。选项
-D
在GCC中定义了一个预处理器宏,在本例中为
自动生成标记。您可以在源文件中找到它的用途,并决定是否仍然需要该宏

如果不是,请删除它的所有用途,从
所有CCPPFLAGS
的定义中删除
-D AUTO\u GEN\u BUILD\u TAG='“${BUILDTAG}”
,删除带有
BUILDTAG
的行,并删除
Makefile
echo
编辑的行

如果仍然需要,则必须将其内容设置为其他内容<代码>$(shell…
在shell中执行
,可能是Bash。(有关更多信息,请参阅。)
git descripe
命令可从您当前所在的分支(HEAD)找到可访问的最新标记
--all
启用搜索,即使在非真标记的对象中也是如此
--long
确保输出的格式。引用Git 1.7.2.3手册:

--long
    Always output the long format (the tag, the number of commits and
    the abbreviated commit name) even when it matches a tag. This is
    useful when you want to see parts of the commit object name in
    "describe" output, even when the commit in question happens to be a
    tagged version. Instead of just emitting the tag name, it will
    describe such a commit as v1.2-0-gdeadbee (0th commit since tag
    v1.2 that points at object deadbee....).
从示例中的
v1.2-0-gdeadbee
开始,
tr…| awk…
管道将生成
0-gdeadbee
,即自标记指向的对象的ID的最后一个标记、连字符、字母g和前七个字符以来的提交数

从现在起,你就得靠自己了。如何调整“自动生成”标记的值取决于它的用途以及您现在如何分配版本号。SVN使用不同的版本号约定。如果您知道如何在shell中获取其值,只需将管道粘贴到
BUILDTAG
定义中,而不是
BUILDTAG中的原始命令(
)=