Bazelを使用してプロジェクトをビルドしています。シングルヘッダー テスト フレームワークCatch v2を使用したいと思います。http_fileルールを使用してBazelに catch ヘッダーをダウンロードさせることにしました。私のWORKSPACE
ファイルは次のようになります。
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
http_file(
name = "catch",
downloaded_file_path = "catch.hpp",
sha256 = "cc6cc272cf84d8e10fb28f66f52584dedbb80d1234aae69e6a1027af4f31ae6f",
urls = ["https://github.com/catchorg/Catch2/releases/download/v2.4.2/catch.hpp"],
)
ドキュメントによると、テストは次のように生成されたパッケージに依存します。
cc_test(
name = "my_test",
srcs = ["@catch//file", "my_test.cc"]
)
テストファイルmy_test.cc
はこれ以上簡単にはなりません:
#include "catch.hpp"
ただし、次のエラーが表示されます。
$ bazel test --config=opt -s //...
WARNING: [...]/BUILD:25:10: in srcs attribute of cc_test rule //test:my_test: please do not import '@catch//file:catch.hpp' directly. You should either move the file to this package or depend on an appropriate rule there
SUBCOMMAND: # //test:my_test [action 'Compiling test/my_test.cc']
(cd [...] && \
exec env - [...] \
/usr/bin/gcc
-U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer '-std=c++0x' -MD -MF [...].d '-frandom-seed=[...].o' -fPIC
-iquote .
-iquote bazel-out/k8-fastbuild/genfiles
-iquote bazel-out/k8-fastbuild/bin
-iquote external/bazel_tools
-iquote bazel-out/k8-fastbuild/genfiles/external/bazel_tools
-iquote bazel-out/k8-fastbuild/bin/external/bazel_tools
-fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c test/my_test.cc
-o [...].o)
ERROR: [...]/BUILD:23:1: C++ compilation of rule '//test:my_test' failed (Exit 1)
test/my_test.cc:1:28: fatal error: catch.hpp: No such file or directory
compilation terminated.
[...]
FAILED: Build did NOT complete successfully
cc_library
ラッパーを作成したりcatch/catch.hpp
、catch/file/catch.hpp を含めたりすると、同じエラーが発生します。