git - makefile 中的 grep 函数
问题描述
我正在尝试SonarQube
对我的C
代码进行分析。我想将分析作为 make 目标运行。我想通过使用 git 命令添加一个属性来获取分支名称
我尝试构建 git 命令来获取分支名称(也涵盖了处于分离HEAD
状态时的条件)。
我的 Makefile 中的这一特定行导致了问题
SONAR_SCANNER_OPTS = -Dsonar.branch.name=$(shell git ls-remote --heads origin | grep $(git rev-parse HEAD) | cut -d / -f3,4) -Dsonar.projectVersion=$(shell date +%Y%m%d%H%M-${USER})
我得到的错误是:
用法:grep [OPTION]... PATTERN [FILE]... 尝试 'grep --help' 获取更多信息。
谁能帮我理解我的语法有什么问题?我已经尝试了更多的东西,比如双引号命令,使用 $$ 和改变括号,但它的行为不像预期的那样。
解决方案
在
SONAR_SCANNER_OPTS = -Dsonar.branch.name=$(shell git ls-remote --heads origin | grep $(git rev-parse HEAD) | cut -d / -f3,4) -Dsonar.projectVersion=$(shell date +%Y%m%d%H%M-${USER})
你有
| grep $(git rev-parse HEAD) |
Make 认为这git
是一个 make 函数,就像它认为shell
是一个 make 函数一样。但与 不同shell
的是,Make 函数git
不存在,所以它是空的,所以上面的管道相当于
| grep |
这就是为什么您会收到 grep 的使用信息。
您需要将其替换为
| grep $(shell git rev-parse HEAD) |
另一种方法是让 shell 执行 git 而不是让 Make 执行它:
| grep $$(git rev-parse HEAD) |
但这不太可读。
推荐阅读
- excel - 多列验证,1列比较
- android - 图片上传不适用于 WKWebView 但适用于 SFSafariViewController
- node.js - 如何使用真实的 url 而不是 localhost 使 api 休息
- c - 创建匿名结构的 typedef 有什么意义?
- element-ui - 在 element-ui 传输组件中使用 render-content 属性进行自定义渲染不起作用
- angular - Angular7 - [ngModel] 不会在组件中更新,当两次输入相同的值时
- r - 更了解 reshape() 函数
- xcode - iTunes Store 操作失败。下载的软件组件已损坏,将无法使用
- javascript - 如何使用局部变量更改全局变量
- mysql - 如何提取分隔符前后的字符串并存储在mysql中?