微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bazel genrule:如何获取工作区目录的绝对路径?

如何解决Bazel genrule:如何获取工作区目录的绝对路径?

我想创建一个 bazel gen-rule 来创建一个包含当前 git commit hash 的头文件

#include <stdio.h>

int main()
{
    int amount,n100,n50,n20,n10,n5,n2,n1;

    printf("Input the amount: \n");
    scanf("%i",&amount);

    n100 = amount / 100;
    n50 = (amount % 100) / 50;
    n20 = (int)(n50 % (amount % 100)) / 20;
    n10 = (int)(n20 % (n50 % (amount % 100))) / 10;
    n5 = (int)(n10 % (n20 % (n50 % (amount % 100)))) / 5;
    n2 = (int)(n5 % (n10 % (n20 % (n50 % (amount % 100))))) / 2;
    n1 = (int)(n2 % (n5 % (n10 % (n20 % (n50 % (amount % 100)))))) / 1;
    
    printf("%i Note(s) of 100.00\n",n100);
    printf("%i Note(s) of 50.00\n",n50);
    printf("%i Note(s) of 20.00\n",n20);
    printf("%i Note(s) of 10.00\n",n10);
    printf("%i Note(s) of 5.00\n",n5);
    printf("%i Note(s) of 2.00\n",n2);
    printf("%i Note(s) of 1.00\n",n1);

    return 0;   
}

到目前为止,我还没有测试过 linux 版本 (cmd),但只在 windows (cmd_ps) 上测试过并且它可以工作,但问题是当 powershell 执行时,它不在工作区目录中(这是我的 git 根目录)。我需要将 # Generate "version_info.h" cc_library( name = "version_info",srcs = [],hdrs = ["version_info.h"],visibility = ["//visibility:private"],) VERSION_INFO_H_BASH = """ #ifndef VERSION_INFO_H_ #define VERSION_INFO_H_ #define COMMIT_HASH "%s" #endif // VERSION_INFO_H_ """ VERSION_INFO_H_PS = """ #ifndef VERSION_INFO_H_ #define VERSION_INFO_H_ #define COMMIT_HASH "{0}" #endif // VERSION_INFO_H_ """ genrule( name = "generate_version_info",outs = ["version_info.h"],cmd_ps = ("cd what_comes_here; @'%s'@ -f \"$$(git.exe rev-parse HEAD)\" | Out-File $(OUTS)" % VERSION_INFO_H_PS),cmd = ("cd what_comes_here"; printf '%s' \"$$(git rev-parse HEAD)\ > $(OUTS)" % VERSION_INFO_H_BASH),) 替换为第一个 cd 到我工作区的根目录吗?

解决方法

利用 Bazel 的 workspace status 特性。可以在 here 中找到一个示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。