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 не имеет оптимизации включенной.
Это свойство инициализируется значением переменной CMAKE_OPTIMIZE_DEPENDENCIES при создании целевого объекта.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/prop_tgt/OPTIMIZE_DEPENDENCIES.html