2016-07-06 25 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