2016-07-06 5 views
2

그래서 unittests 시뮬레이션을 실행하기 위해 bazel 및 googletest 프레임 워크를 사용하고 싶습니다. 이를 위해 샘플 입력 파일과 샘플 출력 파일을 갖고 싶습니다. 원본 파일, 테스트 파일 또는 리포지토리의 파일의 절대 경로를 얻으 려하므로 거기에서 파일을 입력하는 상대 경로를 만들 수 있습니다.
예는 :bazel/googletest에서 환경 변수를 사용하는 방법

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

중요한 라인은 콥트에 있습니다

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

그래서 검색을 많이 후, 난 당신과 같이 bazel 똑바로 빌드 파일에서 상수를 정의 할 수 있다는 것을 발견 어디에서 $(workspace)을 사용하고 있습니까?
here을 읽었으므로 copts (또는 defines)와 같이 작동 할 수 있습니다. 에 첫 번째 페이지 링크가, 나에게 말한다
This 페이지는,이 같은 환경 변수를 사용할 수 있습니다 : 그것은 또한 나에게 말한다 $ (FOO)
을, 나는 모든 availabe 환경 변수를 얻을 수 bazel info --show_make_env를 실행할 수 있습니다.

실행할 때 다른 많은 것들 옆에 작업 영역이 포함 된 큰 환경 변수 목록이 나타납니다.
지금 여기에 문제가 온다 :
을하지만이 $(workspace) 변수를 사용하는 경우, bazel는 $ (작업 공간)이 정의되지 않음을 알려줍니다.
$ PWD 변수를 사용할 수 있다면 저에게도 도움이 될 것입니다. 그러나이 변수 중 하나를 사용할 수는 없습니다.

누군가가 나를 도울 수 있기를 바랍니다.
인사말,
로미오

편집 :
내가 지금 bazel 빌드 파일의 '데이터'옵션을 사용합니다. 이것은 주로 작동

답변

0

어, 이것은 끔찍한 결과입니다. 기본적으로 --show_make_envbazel info의 출력과 make 변수를 결합하여 어느 것이 어떤 것인지 표시하지 않습니다. 만들기 변수를 찾으려면 비 확인 정보를 제거하기 위해 출력을 diff를 할 수 있습니다

$ 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 

을 사람들이 사용할 수 있도록 변수입니다.

-D을 사용하여 하드 코드를 작성하는 대신 테스트에서 PWD를 찾을 수 있습니까?

+0

그래, 내 코드에서 PWD를 얻는 것이 내 목표이지만 크로스 플랫폼 방식을 찾아내는 데 많은 시간을 할애했지만 좋은 코드를 찾지 못했습니다. 어떤 사람들은 _ _FILE_ _을 사용하라고 권유하지만 나에게 완전한 길을주지는 않습니다. –

+0

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