Make失败,因为在项目从git移动到SVN时调用git
我试图编译的项目之前在Git存储库中,通过在Ubuntu Linux终端中调用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.
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
将其回显到终端,然后
- 在
中设置所有\u CCPPFLAGS变量时:Makerules.mk
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
将其回显到终端,然后
- 在
中设置所有\u CCPPFLAGS变量时:Makerules.mk
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中的原始命令(…
)=