UNITY_BUILD_RELOCATABLE

4.0 版本新增。

默认情况下,启用 UNITY_BUILD 时生成的 unity 文件使用绝对路径来引用原始源文件。这会导致 unity 文件根据源文件的位置产生不同的输出。

当此属性设置为 true 时,在生成的 unity 源文件内的 `#include` 行将尝试使用到原始源文件的相对路径(如果可能),以标准化 unity 文件的输出。

unity 文件到原始源文件的路径使用以下优先级:

  • 如果源文件直接位于 CMAKE_BINARY_DIR 或其下的子文件夹中,则使用相对于生成 unity 文件的路径。

  • 如果源文件直接位于 CMAKE_SOURCE_DIR 或其下的子文件夹中,则使用相对于 CMAKE_SOURCE_DIR 的路径。

  • 源文件的绝对路径。

此目标属性 *不* 保证在不同环境中具有一致的 unity 文件,因为最终的优先级是绝对路径。

用法示例

add_library(example_library
            source1.cxx
            source2.cxx
            source3.cxx)

set_target_properties(example_library PROPERTIES
                      UNITY_BUILD True
                      UNITY_BUILD_RELOCATABLE TRUE)