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

时间:2016-07-06 17:04:00

标签: c++ bash g++ googletest bazel

所以我想使用bazel和googletest框架来运行模拟的单元测试。为此,我想要sample-inputfiles和sample-outputfiles。 我想得到源文件,测试文件或存储库中任何文件的绝对路径,这样我就可以创建一个从那里输入文件的相对路径。
E.g:

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)", 
    ],          
) 

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

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

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

编辑:
我现在使用bazel构建文件中的'data'选项。这主要适用于

1 个答案:

答案 0 :(得分: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对其进行硬编码?