web-dev-qa-db-ja.com

selectを使用して、WindowsとLinuxのどちらでC ++コードをビルドしているかを正しく検出するにはどうすればよいですか?

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を使用するように指示しましたが、オペレーティングシステムを「検出」できませんでした。私は何か間違ったことをしたと確信していますが、情報と例が不足しているため、適切に使用する方法があまりわかりません。

14
thinlizzy

@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 のドキュメントを参照してください。

16
Jin

プロジェクトに.bazelrcを追加します。行build:vs2019 --cxxopt=/std:c++14build:gcc --cxxopt=-std=c++14を追加します。コードをビルドするbazel build --config=msvc //...またはbazel build --config=gcc //....

0
Vertexwahn