【发布时间】:2020-06-09 19:29:38
【问题描述】:
所以我正在修改一个项目以使用 clang++ 和 sanitizers(用于模糊测试)构建,而不仅仅是 g++。它使用 bazel 构建。
该项目当前下载了它的一些构建依赖项 (m4/bison/flex) 并使用 https://github.com/bazelbuild/rules_foreign_cc 中的 make_configure 规则构建这些依赖项。重要的是,这些仅用于代码生成,而不是链接/编译。
不幸的是,这些依赖项碰巧有各种消毒剂问题。这意味着如果我们使用 --copt="-fsanitize=address" 构建,我们就不能将它们用于代码生成并且构建失败!现在,如果我们遇到链接依赖项的敏感问题,那将是不可避免的,我们需要与维护人员一起解决问题,但现在我们真的更愿意解决这些问题,因为它们不像直接影响我们正在编译的实际目标的安全性和可靠性。
是否有一种简单的方法可以或多或少地指定“请忽略在命令行上仅针对此目标传递的编译器标志/链接器选项/等,并改用其他集合”作为规则?在大多数情况下,通过命令行(或通过全局配置)传递的 linkopts/copts/cxxopts 似乎是附加的,我们希望避免这种情况。如果没有,解决这个问题的最佳方法是什么?在包含实际构建规则的自定义规则中保存/取消设置/重置所有变量?
谢谢, 埃弗里特
【问题讨论】:
-
提醒:对于 C++,您应该使用
g++,对于 C 语言,您应该使用gcc。没有 C/C++ 语言。 -
是的,很公平。我们实际上使用的是 g++/clang++ 而不是 gcc/clang。我将编辑问题。