- Cmake v3.23.2 (генератор)
Код: Выделить всё
Ninja Multi-Config
- ninja v1.11.0
- msvc v19.27
- ОС Windows < /li>
Указанная внешняя библиотека (давайте назовут ее foo < /code>) предоставляется предварительно построено и состоит из следующего: < /p>
- < li> Один динамический файл библиотеки ссылок (.dll)
- Один файл библиотеки импорта (.lib)
- Несколько заголовок в одном включении каталог
- Зависимость от Boost.DateTime.
- Мой проект может быть успешно создан с версией 0.1.0 внешней библиотеки foo < /code>. < /li>
Версия 0.2.0 Представлен Foo , который может нарушить совместимость как API, так и ABI с предыдущей версией (например, изменения подписи метода, изменения заголовка и т. Д.). Проект, чтобы быть совместимым с 0.2.0 из foo . - Постепенно восстановление моего проекта сейчас не удается.
- Чистая восстановление моего проекта успешно.
Код: Выделить всё
find_package(foo REQUIRED MODULE)
target_link_libraries(my_component PUBLIC foo:foo)
Код: Выделить всё
add_library(foo::boost_datetime SHARED IMPORTED)
set_target_properties(foo::boost_datetime
PROPERTIES
IMPORTED_LOCATION_RELEASE "${FOO_ROOT}/boost_date_time-vc142-mt.dll"
IMPORTED_LOCATION_DEBUG "${FOO_ROOT}/boost_date_time-vc142-mt-gd.dll"
IMPORTED_IMPLIB_RELEASE "${FOO_ROOT}/boost_date_time-vc142-mt.lib"
IMPORTED_IMPLIB_DEBUG "${FOO_ROOT}/boost_date_time-vc142-mt-gd.lib"
)
add_library(foo:foo SHARED IMPORTED)
set_target_properties(foo:foo
PROPERTIES
IMPORTED_LOCATION_RELEASE ${FOO_IMPORTED_LOCATION_RELEASE}
IMPORTED_LOCATION_DEBUG ${FOO_IMPORTED_LOCATION_DEBUG}
IMPORTED_IMPLIB_RELEASE ${FOO_LIBRARY_RELEASE}
IMPORTED_IMPLIB_DEBUG ${FOO_LIBRARY_DEBUG}
INTERFACE_INCLUDE_DIRECTORIES "${FOO_INCLUDE_DIRS}"
)
target_link_libraries(foo:foo INTERFACE foo::boost_datetime)
< /code>
Другая релевантная информация может заключаться в том, что используются два разных флажа линкеров MSVC, в зависимости от конфигурации сборки: < /p>
Debug : /Incremental < /code> < /li>
release: /urcremental: no < /code> < /li>
< /ul>
Есть ли какие -либо Доступные варианты или трюки Cmake (о которых я не знаю), которые позволяют выполнять дополнительную перестройку моего проекта после обновления внешней библиотеки Foo
Обратите внимание, что я до сих пор не проверял много вещей, потому что я спрашиваю себя, должен ли кто-нибудь пытаться выполнить нечистые сборки после обновления внешней зависимости в любом случае. Любые руководящие принципы и подсказки по этой теме очень ценят.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ter-upgrad