OPTIMIZE_DEPENDENCIES
Новое в версии 3.19.
Активирует оптимизацию зависимостей статических и объектных библиотек.
Когда эта свойство установлено в значение true, некоторые зависимости статической или объектной библиотеки могут быть удалены во время генерации, если они не нужны для построения библиотеки, поскольку статические и объектные библиотеки фактически не связываются ни с чем.
Если для статической или объектной библиотеки включена оптимизация зависимостей, она сначала отбрасывает все зависимости. Затем она просматривает все прямые и косвенные зависимости, которые она изначально имела, и добавляет их обратно, если они соответствуют одному из следующих критериев:
- Зависимость была добавлена в библиотеку с помощью
add_dependencies(). - Зависимость была добавлена в библиотеку через исходный файл в библиотеке, сгенерированный пользовательской командой, которая использует зависимость.
- Зависимость имеет какие-либо
PRE_BUILD,PRE_LINK, илиPOST_BUILDпользовательские команды, связанные с ней. - Зависимость содержит какие-либо исходные файлы, сгенерированные пользовательской командой.
- Зависимость содержит какие-либо языки, которые порождают побочные эффекты, которые релевантны для библиотеки. В настоящее время предполагается, что все языки, кроме C, C++, Objective-C, Objective-C++, ассемблера и CUDA, генерируют побочные эффекты. Однако предполагается, что побочные эффекты одного языка не релевантны для другого (например, предполагается, что библиотека Fortran не имеет побочных эффектов, релевантных для библиотеки Swift).
В качестве примера, предположим, что у вас есть статическая библиотека Fortran, которая зависит от статической библиотеки C, которая, в свою очередь, зависит от статической библиотеки Fortran. У верхней библиотеки Fortran включена оптимизация, но у средней библиотеки C — нет. Если вы собираете верхнюю библиотеку Fortran, нижняя библиотека Fortran также будет собрана, но не средняя библиотека C, поскольку у библиотеки C нет побочных эффектов, релевантных для библиотеки Fortran. Однако, если вы собираете среднюю библиотеку C, нижняя библиотека Fortran также будет собрана, даже если у нее нет побочных эффектов, релевантных для библиотеки C, так как у библиотеки C оптимизация не включена.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.19/prop_tgt/OPTIMIZE_DEPENDENCIES.html