summaryrefslogtreecommitdiffstats
path: root/Help/prop_tgt/UNITY_BUILD.rst
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-09-05 12:35:29 (GMT)
committerKitware Robot <kwrobot@kitware.com>2019-09-05 12:36:06 (GMT)
commitac4d6d4a9d9b81773e61c643169cb2afe1bab644 (patch)
tree7679958f3ffece7ae00993fa7c26c70d9b6a1dc2 /Help/prop_tgt/UNITY_BUILD.rst
parentfcba9c3baa00631407f493f97afe7e9cd1b844a7 (diff)
parent7786a05c707dc5ffe9fdf7a6b468f56ed18c9e8a (diff)
downloadCMake-ac4d6d4a9d9b81773e61c643169cb2afe1bab644.zip
CMake-ac4d6d4a9d9b81773e61c643169cb2afe1bab644.tar.gz
CMake-ac4d6d4a9d9b81773e61c643169cb2afe1bab644.tar.bz2
Merge topic 'unity-build'
7786a05c70 Unity build: Add XCode support 1353802af3 Unity build: Add unit tests 8dfeb5d278 Unity build: Add support for Visual Studio generator 7114c141e2 Unity build: Add support for Ninja and Makefile generators Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Stanislav Ershov <digital.stream.of.mind@gmail.com> Acked-by: Evgeniy Dushistov <dushistov@mail.ru> Acked-by: Viktor Kirilov <vik.kirilov@gmail.com> Merge-request: !3611
Diffstat (limited to 'Help/prop_tgt/UNITY_BUILD.rst')
-rw-r--r--Help/prop_tgt/UNITY_BUILD.rst55
1 files changed, 55 insertions, 0 deletions
diff --git a/Help/prop_tgt/UNITY_BUILD.rst b/Help/prop_tgt/UNITY_BUILD.rst
new file mode 100644
index 0000000..d326ee2
--- /dev/null
+++ b/Help/prop_tgt/UNITY_BUILD.rst
@@ -0,0 +1,55 @@
+UNITY_BUILD
+-----------
+
+Should the target source files be processed into batches for
+faster compilation. This feature is known as "Unity build",
+or "Jumbo build".
+
+The `C` and `CXX` source files are grouped separately.
+
+This property is initialized by the value of the
+:variable:`CMAKE_UNITY_BUILD` variable if it is set when
+a target is created.
+
+.. note ::
+
+ It's not recommended to directly set :prop_tgt:`UNITY_BUILD`
+ to `ON`, but to instead set :variable:`CMAKE_UNITY_BUILD` from
+ the command line. However, it IS recommended to set
+ :prop_tgt:`UNITY_BUILD` to `OFF` if you need to ensure that a
+ target doesn't get a unity build.
+
+The batch size can be specified by setting
+:prop_tgt:`UNITY_BUILD_BATCH_SIZE`.
+
+The batching of source files is done by adding new sources files
+wich will `#include` the source files, and exclude them from
+building by setting :prop_sf:`HEADER_FILE_ONLY` to `ON`.
+
+
+ODR (One definition rule) errors
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Since multiple source files are included into one source file,
+it can lead to ODR errors. This section contains properites
+which help fixing these errors.
+
+The source files marked by :prop_sf:`GENERATED` will be skipped
+from unity build. This applies also for the source files marked
+with :prop_sf:`SKIP_UNITY_BUILD_INCLUSION`.
+
+The source files that have :prop_sf:`COMPILE_OPTIONS`,
+:prop_sf:`COMPILE_DEFINITIONS`, :prop_sf:`COMPILE_FLAGS`, or
+:prop_sf:`INCLUDE_DIRECTORIES` will also be skipped.
+
+With the :prop_tgt:`UNITY_BUILD_CODE_BEFORE_INCLUDE` and
+:prop_tgt:`UNITY_BUILD_CODE_AFTER_INCLUDE` one can specify code
+to be injected in the unity source file before and after every
+`#include` statement.
+
+.. note ::
+
+ The order of source files defined in the `CMakeLists.txt` will
+ be preserved into the generated unity source files. This can
+ be used to manually enforce a specific grouping based on the
+ :prop_tgt:`UNITY_BUILD_BATCH_SIZE`.