Так что я хочу использовать базу и систему 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:
я теперь использовать опцию 'данные' в файле Базэл сборки. Это работает в основном
Да, это моя цель получить PWD в моем коде, но я потратил довольно много времени на то, чтобы понять кросс-платформенный способ, и я не нашел хорошего. Некоторые люди предлагают использовать _ _FILE_ _, но это не дает мне полный путь. –
http://stackoverflow.com/questions/2868680/what-is-a-cross-platform-way-to-get-the-current-directory? – kristina