# UNITY_BUILD_MODE

Added in version 3.18.

CMake provides different algorithms for selecting which sources are grouped together into a bucket. Selection is decided by this property, which has the following acceptable values:

`BATCH`

  When in this mode CMake determines which files are grouped together. The `UNITY_BUILD_BATCH_SIZE` property controls the upper limit on how many sources can be combined per unity source file.

  Example usage:

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

      set_target_properties(example_library PROPERTIES
                            UNITY_BUILD_MODE BATCH
                            UNITY_BUILD_BATCH_SIZE 2
                            )

`GROUP`

  When in this mode each target explicitly specifies how to group source files. Each source file that has the same `UNITY_GROUP` value will be grouped together. Any sources that don't have this property will be compiled individually. The `UNITY_BUILD_BATCH_SIZE` property is ignored when using this mode.

  Example usage:

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

      set_target_properties(example_library PROPERTIES
                            UNITY_BUILD_MODE GROUP
                            )

      set_source_files_properties(source1.cxx source2.cxx source3.cxx
                                  PROPERTIES UNITY_GROUP "bucket1"
                                  )
      set_source_files_properties(source4.cxx
                                  PROPERTIES UNITY_GROUP "bucket2"
                                  )

If no explicit `UNITY_BUILD_MODE` has been specified, CMake will default to `BATCH`.