Bazelで自作ISSをビルドしようとしているが、いろいろと詰まっている。なかなかうまくいかないらしい。
これはC++のソースコードの記述を、Bazelに合わせるべきなので、Bazelの設定をがんばってC++に合わせるべきか。。。
includeファイルの指定方法
includeファイルを指定する方法は、どうやら2つある。
copts = ["-Iapp1"]
あるいは、
includes = ["app1"]
ただし、これらをあえて記述する必要はない。
Bazelでのビルドではいろんなオプションが指定できるが、これをどのように実現するかが問題になる。 例えば、上記のようなプロジェクト構成で、以下のようなビルド階層を取っているとする。
WORKSPACE app1 app1.cpp app1.hpp BUILD app2 app2.cpp app2.hpp BUILD app3 app3.hpp
app1内でapp2のヘッダファイルをどのように指定するか
WORKSPACEファイルが上位階層にあるので、WORKSPACEを起点にして記述する。
cc_binary ( name = "app1", srcs = ["app1.cpp"], deps = ["//app2", "//app3"], )
このとき、coptsもincludesも使っていないが、app1.cppには以下のようにインクルードファイルを記述する。
#include <stdio.h> #include "app2/app2.hpp" #include "app3/app3.hpp" int main () { printf ("App2 calling () ... %d\n", app2(1, 2)); printf ("HOGE is = %d\n", HOGE); return 0; }
WORKSPACEを起点としたヘッダファイルの場所を記述する。
ヘッダファイルのみのディレクトリを参照するには
app3はヘッダファイルのみを記述したディレクトリになっている。ここでは、cc_inc_libraryを使ってプロジェクトとして記述する。
cc_inc_library ( name = "app3", hdrs = ["app3.hpp"], visibility = ["//visibility:public"], )
これにより、app3のディレクトリが、app1から参照できるようになる。
app1$ make bazel build app1 --verbose_failures .. INFO: Found 1 target... Target //app1:app1 up-to-date: bazel-bin/app1/app1 INFO: Elapsed time: 9.171s, Critical Path: 1.24s