2016-07-06 4 views
2

Так что я хочу использовать базу и систему googletest для запуска unittests моделирования. Для этого я хочу иметь 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, что вы можете указать коты (или, альтернативно, defines), как это, что действительно работает.
This страница, которая первая страница ссылается на, говорит мне, что я могу использовать переменные окружения, как это: $ (Foo)
Он также говорит мне, что я могу запустить bazel info --show_make_env, чтобы получить все переменные окружения Availabe.

Когда я запускаю его, я получаю большой список переменных окружения, который содержит рабочее пространство, рядом с другими.
Теперь возникает проблема:
Но когда я использую переменную $(workspace), bazel сообщает мне, что $ (рабочее пространство) не определено.
Я бы тоже работал для меня, если бы мог использовать переменную $ PWD, но я не мог заставить это работать.

Я надеюсь, что кто-то может мне помочь.
Привет,
Romeo

Edit:
я теперь использовать опцию 'данные' в файле Базэл сборки. Это работает в основном

ответ

0

Ух, это ужасный выход. В принципе, --show_make_env объединяет выходные данные bazel info и переменные 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 

Таковы делают переменные, которые доступны.

Не могли бы вы найти PWD в своем тесте вместо того, чтобы использовать -D для жесткого кодирования?

+0

Да, это моя цель получить PWD в моем коде, но я потратил довольно много времени на то, чтобы понять кросс-платформенный способ, и я не нашел хорошего. Некоторые люди предлагают использовать _ _FILE_ _, но это не дает мне полный путь. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^