如何使用select来正确检测我是在Windows或Linux中构建C ++代码?

时间:2018-02-19 06:54:39

标签: c++ bazel

我正在编写一个示例C ++项目,该项目使用Bazel作为其他合作者可以遵循的示例习惯。

以下是存储库: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讨论列表中有人告诉我使用选择,但我的尝试未能“检测到”'操作系统。我确定我做错了什么,但缺乏信息和示例并没有告诉我如何正确使用它。

2 个答案:

答案 0 :(得分:14)

render() { [...] this.state.photo.map((singlePhoto) => ( <img src={singlePhoto.urls.small} /> )) [...] 包含预定义的平台条件:

@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

有关语法的详细信息,请参阅select的文档。

答案 1 :(得分:0)

向您的项目添加.bazelrc。添加行build:vs2019 --cxxopt=/std:c++14build:gcc --cxxopt=-std=c++14。构建代码bazel build --config=msvc //...bazel build --config=gcc //....