UNITY_BUILD_RELOCATABLE

在版本 4.0 中新增。

預設情況下,啟用 UNITY_BUILD 時產生的合併檔案會使用絕對路徑來參考原始原始檔。這會導致合併檔案產生不同的輸出,具體取決於原始檔的位置。

當此屬性設定為 true 時,產生的合併原始檔內的 #include 行將嘗試使用相對於原始原始檔的路徑(如果可能),以便標準化合併檔案的輸出。

合併檔案到原始原始檔的路徑將使用以下優先順序

  • 如果原始檔直接存在或存在於 CMAKE_BINARY_DIR 下的子資料夾中,則使用相對於產生的合併檔案的路徑

  • 如果原始檔直接存在或存在於 CMAKE_SOURCE_DIR 下的子資料夾中,則使用相對於 CMAKE_SOURCE_DIR 的相對路徑

  • 原始檔的絕對路徑。

此目標屬性保證在不同環境中合併檔案的一致性,因為最終優先順序是絕對路徑。

使用範例

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

set_target_properties(example_library PROPERTIES
                      UNITY_BUILD True
                      UNITY_BUILD_RELOCATABLE TRUE)