Reputation: 1416
So I want to use Bazel and the GoogleTest framework for running unit tests of a simulation. For this, I want to have sample-inputfiles and sample-outputfiles. I want to get the absolute path of the source file, the test file or any file in the repository, so I can create a relative path to input files from there.
E.g.:
std::string path = __SOME_PATH_IN_REPO__+"/../inputfiles/input.txt";
std::fstream infile(path);
So after a lot of searching, I found out that you can define constants straight from the BUILD file for bazel like so:
cc_test(
name = "gtest_capabilities",
srcs = [
"testing/pwdTest.cpp",
],
deps = [
"@gtest//:main",
],
copts = [
"-D __ABSOLUTE_PATH__=$(workspace)",
],
)
The important line is in copts, where I am using $(workspace)
.
I read here, that you can specify copts (or alternatively defines
) like this, which does work.
This page, which the first page links to, tells me, I can use environment variables like this: $(FOO)
It also tells me, that I can run bazel info --show_make_env
to get all availabe environment variables.
When I run it, I get a big list of environment variables, which contains workspace, next to alot of others.
Now here comes the problem:
But when I use the $(workspace)
variable, bazel tells me, that $(workspace) is not defined.
I would also work for me if I could use the $PWD variable, but I couldn't get this to work either.
I hope someone can help me.
Greetings,
Romeo
Edit:
I now use the 'data' option in the bazel build file. This works mostly
Upvotes: 4
Views: 3590
Reputation: 23592
Ugh, this is a terrible output. Basically, --show_make_env
mushes together the output of bazel info
and the make variables, giving no indication of which is which. To find the make variables, you can diff the outputs to remove the non-make info:
$ 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
Those are the make variables that are available.
Could you find the PWD in your test, instead of using a -D
to hardcode it?
Upvotes: 2