Bazel:不同构建选项的单独输出目录
Bazel: Separate output directories for different build options
Bazel 对于不同的编译模式(fastbuild、opt、dbg)有不同的输出目录,这允许它在调试模式下编译应用程序后保持发布构建缓存的完整性。太好了。
是否可以对不同的编译选项执行相同的操作?
我的用例:我有一个定制的 C++ 符号计算系统。程序的每个 运行 都是一次计算。大多数计算需要几秒钟。但有些需要几分钟。为了加快后者的速度,我展开了几个低级函数,现在数千行代码被复制到每个编译单元(因为函数是模板化的)。这对计算速度产生了不错的影响,但也显着减慢了编译速度。将这些优化用于 运行 的一小部分确实有意义。
所以,将它们放在我可以通过 --cxxopt=-DUNROLL_ALL_THE_THINGS
切换的定义下。但是每当我从展开版本切换到简单版本并返回时,Bazel 都会丢弃编译缓存。本质上,我将“opt”模式分成了两个(“opt”和“super-opt”),但我不能让 Bazel 这样看。
可以使用 --platform_suffix
选项手动为输出目录名称添加后缀。因此,您可以在使用 --cxxopt=-DUNROLL_ALL_THE_THINGS
.
时传递 --platform_suffix=super
对于不同的命令,请传递 --platform_suffix=your_configuration_name
。
因此,如果您有自定义 dbg 配置,它将是
--platform_suffix=dbg-myconfig
类似地,对于 opt 构建传递此标志:
--platform_suffix=opt-myotherconfig
Bazel 对于不同的编译模式(fastbuild、opt、dbg)有不同的输出目录,这允许它在调试模式下编译应用程序后保持发布构建缓存的完整性。太好了。
是否可以对不同的编译选项执行相同的操作?
我的用例:我有一个定制的 C++ 符号计算系统。程序的每个 运行 都是一次计算。大多数计算需要几秒钟。但有些需要几分钟。为了加快后者的速度,我展开了几个低级函数,现在数千行代码被复制到每个编译单元(因为函数是模板化的)。这对计算速度产生了不错的影响,但也显着减慢了编译速度。将这些优化用于 运行 的一小部分确实有意义。
所以,将它们放在我可以通过 --cxxopt=-DUNROLL_ALL_THE_THINGS
切换的定义下。但是每当我从展开版本切换到简单版本并返回时,Bazel 都会丢弃编译缓存。本质上,我将“opt”模式分成了两个(“opt”和“super-opt”),但我不能让 Bazel 这样看。
可以使用 --platform_suffix
选项手动为输出目录名称添加后缀。因此,您可以在使用 --cxxopt=-DUNROLL_ALL_THE_THINGS
.
--platform_suffix=super
对于不同的命令,请传递 --platform_suffix=your_configuration_name
。
因此,如果您有自定义 dbg 配置,它将是
--platform_suffix=dbg-myconfig
类似地,对于 opt 构建传递此标志:
--platform_suffix=opt-myotherconfig