如何将额外的构建命令修补到BAZEL项目中构建的第三方CMake专用库?

1cosmwyk  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我想在我的bazel项目中使用一个第三方库。截至目前,库只能用CMake系统构建。我通过http_archive规则获取库的源代码,并使用rules_foreign_cc的cmake规则在我的项目中构建它。由于库只兼容cmake,所以我认为这是在bazel项目中构建它的最快方法,没有修改任何东西。我的构建失败了,因为它抱怨在第三方库的CMakeLists.txt中没有指定cmake_minimum_required。我如何以某种方式将这一额外的行修补到远程CMakeLists.txt?有办法吗?
我把它取出来是这样的:

http_archive(
    name = "third_party_cmake_lib",
    build_file_content = all_content,
    strip_prefix = "prefix",
    urls = ["https://github.com/third_party_cmake_lib"],
)

字符串
在我的项目的bazel BUILD文件中:

load("@rules_foreign_cc//foreign_cc:cmake.bzl", "cmake") 
cmake( 
    name = "third_party_lib", 
    generate_args = ["-GNinja"], 
    lib_source = "@third_party_lib//:all", 
    out_static_libs = ["libthird_party_lib.a"], )


我可以在bazel BUILD文件中设置cmake_minimum_required并告诉它将其修补到第三方库的CMakeLists.txt吗?

tquggr8v

tquggr8v1#

使用http_archive规则的patch_cmd属性。
http_archive规则的属性patch_cmds可以用来执行一些随机shell命令。这可以用来将文件从一个目录移动到根目录或任何其他你想要应用的更改(例如添加最低CMake版本):
您还可以使用patch_cmds_win为Windows构建使用不同的命令:

http_archive(
    name = "fmt",
    ...
    patch_cmds = [
        "mv support/bazel/.bazelrc .bazelrc",
        "mv support/bazel/.bazelversion .bazelversion",
        "mv support/bazel/BUILD.bazel BUILD.bazel",
        "mv support/bazel/WORKSPACE.bazel WORKSPACE.bazel",
    ],
    # Windows-related patch commands are only needed in the case MSYS2 is not installed
    patch_cmds_win = [
        "Move-Item -Path support/bazel/.bazelrc -Destination .bazelrc",
        "Move-Item -Path support/bazel/.bazelversion -Destination .bazelversion",
        "Move-Item -Path support/bazel/BUILD.bazel -Destination BUILD.bazel",
        "Move-Item -Path support/bazel/WORKSPACE.bazel -Destination WORKSPACE.bazel",
    ],
    ...
)

字符串
在此网站上搜索patch,以获取有关修补现有归档的不同选项的详细信息。

相关问题