首页 文章

如何在bazel / googletest中使用环境变量

提问于
浏览
3

所以我想使用bazel和googletest框架来运行模拟的单元测试 . 为此,我想要sample-inputfiles和sample-outputfiles . 我想获取源文件,测试文件或存储库中的任何文件的绝对路径,因此我可以创建从那里输入文件的相对路径 .
例如 . :

std::string path = __SOME_PATH_IN_REPO__+"/../inputfiles/input.txt";
std::fstream infile(path);

经过大量的搜索后,我发现你可以直接从BUILD文件中为bazel定义常量,如下所示:

cc_test( 
    name = "gtest_capabilities", 
    srcs = [ 
        "testing/pwdTest.cpp", 
    ],          
    deps = [ 
        "@gtest//:main", 
    ],          
    copts = [ 
            "-D __ABSOLUTE_PATH__=$(workspace)", 
    ],          
)

重要的是在copts,我正在使用 $(workspace) .
我读了here,您可以像这样指定copts(或者 defines ),这确实有效 .
This页面,第一页链接到,告诉我,我可以使用这样的环境变量:$(FOO)
它还告诉我,我可以运行 bazel info --show_make_env 来获取所有可用的环境变量 .

当我运行它时,我得到一个很大的环境变量列表,其中包含工作区,旁边有很多其他的 .
Now here comes the problem:
但是当我使用 $(workspace) 变量时,bazel告诉我,$(工作空间)没有定义 .
如果我可以使用$ PWD变量,我也会为我工作,但我也无法使用它 .

我希望有一个人可以帮助我 .
问候,
罗密欧

编辑:
我现在在bazel构建文件中使用'data'选项 . 这主要起作用

1 回答

  • 1

    呃,这是一个可怕的输出 . 基本上, --show_make_envbazel info 和make变量的输出组合在一起,没有说明哪个是哪个 . 要查找make变量,您可以对输出进行区分以删除非make信息:

    $ bazel info --show_make_env > make-vars
    $ bazel info > no-make-vars
    $ diff make-vars no-make-vars
    1,22d0
    < ABI: local
    < ABI_GLIBC_VERSION: local
    < ANDROID_CPU: armeabi
    < AR: /usr/bin/ar
    < BINDIR: bazel-out/local-fastbuild/bin
    < BINMODE: -dbg
    < CC: /usr/bin/gcc
    < CC_FLAGS: 
    < COMPILATION_MODE: fastbuild
    < CROSSTOOLTOP: external/local_config_cc
    < C_COMPILER: compiler
    < GENDIR: bazel-out/local-fastbuild/genfiles
    < GLIBC_VERSION: local
    < JAVA: external/local_jdk/bin/java
    < JAVABASE: external/local_jdk
    < JAVA_CPU: k8
    < JAVA_TRANSLATIONS: 0
    < NM: /usr/bin/nm
    < OBJCOPY: /usr/bin/objcopy
    < STACK_FRAME_UNLIMITED: 
    < STRIP: /usr/bin/strip
    < TARGET_CPU: k8
    

    这些是可用的make变量 .

    您可以在测试中找到PWD,而不是使用 -D 进行硬编码吗?

相关问题