2016-07-06 79 views
2

所以我想使用bazel和googletest框架来运行模拟的单元测试。为此,我想要有sample-inputfiles和sample-outputfiles。 我想获取源文件,测试文件或存储库中的任何文件的绝对路径,因此我可以创建一个从此处输入文件的相对路径。
如:如何在bazel/googletest中使用环境变量

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

所以很多搜索后,我发现,你可以定义常量直接从BUILD文件巴泽勒像这样:

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变量,但我无法得到这个工作。

我希望有人能帮助我。
问候,
罗密欧

编辑:
我现在用在巴泽尔构建文件中的“数据”选项。这项工作主要是

回答

0

呃,这是一个可怕的输出。基本上,--show_make_env共同输出bazel info和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对其进行硬编码?

+0

是的,我的目标是在我的代码中获得PWD,但我花了一段时间试图找出一种跨平台的方式,但我没有找到一个好的方法。有人建议使用_ _FILE_ _,但它不能给我完整的路径。 –

+0

http://stackoverflow.com/questions/2868680/what-is-a-cross-platform-way-to-get-the-current-directory? – kristina

相关问题