Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
make:尝试将git\u commit\u id传递给make\u文件中的变量_Git_Shell_Makefile - Fatal编程技术网

make:尝试将git\u commit\u id传递给make\u文件中的变量

make:尝试将git\u commit\u id传递给make\u文件中的变量,git,shell,makefile,Git,Shell,Makefile,我正在尝试获取git提交id,并将其作为命令行值传递到我在cpp中编译的文件中的脚本。为此,我编写了以下代码,将其剪切到我的makefile中 %.cool_stuff: %.c cool_stuff.cpp $(CXX) $(OPT) cool_stuff.cpp -include $< -o $@ -l sqlite3 git_commit_id=$(shell $$(git rev-parse HEAD)) ./$@ 1 $(git_commit_id)

我正在尝试获取git提交id,并将其作为命令行值传递到我在cpp中编译的文件中的脚本。为此,我编写了以下代码,将其剪切到我的makefile中

%.cool_stuff:  %.c cool_stuff.cpp 
    $(CXX) $(OPT) cool_stuff.cpp -include $< -o $@ -l sqlite3 
    git_commit_id=$(shell $$(git rev-parse HEAD))
    ./$@ 1 $(git_commit_id)
%.cool\u stuff:%.c cool\u stuff.cpp
$(CXX)$(OPT)cool_stuff.cpp-包括$<-o$@-l sqlite3
git_commit_id=$(shell$$(git rev解析头))
./$@1$(git\u commit\u id)
问题是,当我运行代码时,部分输出包含以下语句:

/bin/sh:1:CDC8BDF6CCBC9DD14DA68343FE4809F02CBE07E:未找到

这样就不会有任何东西以$(git_commit_id)的形式传递到代码段的最后一行

请告知

在调用eval时围绕
$(shell..)
命令,如下所示

$(eval git_commit_id=$(shell git rev-parse HEAD)) 

waayyyy解释器调用的层太多。试一试

%.cool_stuff:  %.c cool_stuff.cpp 
    $(CXX) $(OPT) cool_stuff.cpp -include $< -o $@ -l sqlite3
    git_commit_id=`git rev-parse HEAD`; \
    ./$@ 1 $$git_commit_id
%.cool\u stuff:%.c cool\u stuff.cpp
$(CXX)$(OPT)cool_stuff.cpp-包括$<-o$@-l sqlite3
git_commit_id=`git rev parse HEAD`\
./$@1$$git\u commit\u id

(编辑:注释中的更正;另外:请注意,标记格式会消耗制表符,在不使用前导制表符替换前导空格的情况下,不要使用c&p)。

尽管对于传统的make,每行都传递到单独的shell,您需要设置变量,然后立即使用它。(gmake有一个非传统模式,可以使用此表单。)这只适用于
ONE_SHELL
指令;通常,make在一个单独的shell中调用每个like,因此我更喜欢
/$@1“$$(git rev parse HEAD)”
@d.BenKnoble我实际上在那里有它,并将它取出以保留变量赋值,没有考虑,修复了。要完全清楚,第一行末尾的反斜杠是不需要的,事实上,这可能不是个好主意。如果在中添加,您将丢失从编译行中可能得到的任何错误结果,而您肯定不想这样做。要么删除第一行末尾的反斜杠(您不需要它),要么替换
在这里使用
&&
在出现故障时短路命令。另外,如果完全放弃变量,直接写入:
/$@1`git rev parse HEAD`
,整个过程更易于阅读(IMO)。