Как настроить Cmake для выполнения постепенной сборки проекта C ++ после обновления предварительно построенной внешней бC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить Cmake для выполнения постепенной сборки проекта C ++ после обновления предварительно построенной внешней б

Сообщение Anonymous »

Я сталкиваюсь с проблемой, согласно которой сборка программного обеспечения Cmake в сложных проектах C ++ не удается после обновления одной внешней библиотеки. Используется следующий инструмент: < /p>
  • 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 .
  • Постепенно восстановление моего проекта сейчас не удается.
  • Чистая восстановление моего проекта успешно.
Внешняя библиотека foo используется следующим образом в cmakelists.txt файлы:

Код: Выделить всё

find_package(foo REQUIRED MODULE)
target_link_libraries(my_component PUBLIC foo: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 
? Я бы предпочел решение, которое не требует модификации множества файлов cmakelists.txt , но вместо этого требуется только изменение в моей структуре Cmake (например, один или несколько параметров) или в файле инструментария Cmake.
Обратите внимание, что я до сих пор не проверял много вещей, потому что я спрашиваю себя, должен ли кто-нибудь пытаться выполнить нечистые сборки после обновления внешней зависимости в любом случае. Любые руководящие принципы и подсказки по этой теме очень ценят.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ter-upgrad
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»