Bazel是否有与CMake相同的问题?
Does Bazel have the same problems as CMake with file globbing?
我正在开始一个新项目,需要选择一个构建系统。我讨厌不得不手动将每个c++源文件添加到我的构建规则中,因为这是一种应该在2016年实现自动化的事情,而且它会在重构时增加额外的工作量(重命名头文件中的类,源文件和构建系统文件…)。
当我遇到这篇文章时,我开始使用递归文件globbing的CMake:用GLOB全局指定源文件?
这表明globbing是邪恶的,因为CMake使用两个阶段的构建(CMake和make),在正常使用中,用户只运行第二阶段(make)。
乍一看,Bazel还允许文件globing。用在巴泽尔身上是邪恶的吗?在代码库上运行find
是否存在这样一个扩展问题,构建系统真的需要避免它吗?
Bazel不存在那篇文章中提到的问题,即:
(我们不建议使用GLOB收集源文件列表你的源代码树。如果没有CMakeLists.txt文件,当一个源是添加或删除,然后生成的构建系统不知道何时请求CMake重新生成)
Bazel将始终注意到是否添加,删除或更改了glob的匹配,并相应地重建。Globbing永远不会给你陈旧的结果与Bazel。
在构建百科全书中列出了一些关于globg的警告和限制,因此在使用globs之前应该仔细阅读。
同样,您可以使用bazel查询查看正在全局化的内容:
bazel query '//path/to/your:target' --output=build
# /Users/kchodorow/gitroot/path/to/your/BUILD:7:1
java_library(
name = "target",
srcs = ["//path/to/your:A.java", "//path/to/your:B.java"],
)
这将打印"evaluate " glob,因此您可以尝试一下,看看Bazel是如何跟踪输入的。
应该发现在Bazel中使用glob,它可能会导致对大glob的长分析阶段,但是如果您使用——watchfs标志,那么文件系统更改将被跟踪观察文件系统事件而不是声明所有文件,因此增量构建应该非常快。
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 在 armhf 上使用 cmake 在 qt 上的编译问题 "Syntax error: wird unexpected (expecting " ) " "
- 将 Boost 与 CMAKE 联系起来时出现问题
- Ubuntu 下的 Cmake 和 Intel IPP 的编译问题
- CMake Qt建立在Windows链接器问题之上
- CMake - OpenVR 编译问题
- 使用 cmake 安装 protobuf 时出现问题
- CMake - 安装问题以制作软件包
- 使用 CMake 构建 {fmt} 时出现问题
- CMake 的测试:找不到图像(可能的 rpath 问题)
- 在 Windows 上使用 Emscripten 和 CMake 编译 GLFM 的问题
- Cmake Mac OSX库链接问题:在Linux上进行编译,但在Mac上进行了编译
- ApplellVM 9.1.0具有C 17支持?还是CMAKE/ENV问题
- 从命名空间嵌入资源的问题(C++和CMake)
- 使用 cmake 构建 dOxygen 的问题
- 特征,制造和cmake之间的问题(可能是cmake错误)
- 在 Travis CI 上运行 C++ 测试时出现问题.Cmake 配置.如何在特拉维斯 ci 上运行测试套件?
- OpenCV CLion (Cmake)链接问题- Cmake报告一个奇怪的错误