Bazelを使用して、他の共同作業者が従うべきイディオムの例として機能するサンプルC++プロジェクトを作成しています。
リポジトリは次のとおりです: https://github.com/thinlizzy/bazelexample
私はそれを「正しく」行っているかどうか、より具体的にはこのファイルについて知りたいです: https://github.com/thinlizzy/bazelexample/blob/38cc07931e58ff5a888dd6a83456970f76d7e5b3/demo/BUILD いつ選ぶか特定の実装。
cc_library(
name = "demo",
srcs = ["demo.cpp"],
deps = [
"//example:frontend",
],
)
cc_binary(
name = "main_win",
deps = [
":demo",
"//example:impl_win",
],
)
cc_binary(
name = "main_linux",
deps = [
":demo",
"//example:impl_linux",
],
)
これは、Bazelプロジェクトの正しい/予想されるイディオムに従っていますか?プラットフォーム固有の依存関係をすべて別々のターゲットに集中させ、バイナリがそれらに依存することで、他のプロジェクトでもこの方法をすでに実行しています。
Bazel-discussリストの誰かが、代わりにselectを使用するように指示しましたが、オペレーティングシステムを「検出」できませんでした。私は何か間違ったことをしたと確信していますが、情報と例が不足しているため、適切に使用する方法があまりわかりません。
@bazel_tools
には、事前定義されたプラットフォーム条件が含まれています。
$ bazel query @bazel_tools//src/conditions:all
@bazel_tools//src/conditions:windows_msys
@bazel_tools//src/conditions:windows_msvc
@bazel_tools//src/conditions:windows
@bazel_tools//src/conditions:remote
@bazel_tools//src/conditions:Host_windows_msys
@bazel_tools//src/conditions:Host_windows_msvc
@bazel_tools//src/conditions:Host_windows
@bazel_tools//src/conditions:freebsd
@bazel_tools//src/conditions:darwin_x86_64
@bazel_tools//src/conditions:darwin
BUILD
ファイルで直接使用できます。
cc_library(
name = "impl",
srcs = ["Implementation.cpp"] + select({
"@bazel_tools//src/conditions:windows": ["ImplementationWin.cpp"],
"@bazel_tools//src/conditions:darwin": ["ImplementationMacOS.cpp"],
"//conditions:default": ["ImplementationLinux.cpp"],
}),
# .. same for hdrs and data
)
cc_binary(
name = "demo",
deps = [":impl"],
)
構文の詳細については、 select
のドキュメントを参照してください。
プロジェクトに.bazelrc
を追加します。行build:vs2019 --cxxopt=/std:c++14
とbuild:gcc --cxxopt=-std=c++14
を追加します。コードをビルドするbazel build --config=msvc //...
またはbazel build --config=gcc //....