Как использовать CPack для упаковки нескольких результатов сборки cmake?

Поскольку мне нужно собрать как статическую, так и общую библиотеку для платформы x86 и arm. Так что с одним и тем же CMakeLists.txt мне приходится запускать его четыре раза с разной конфигурацией. Я хочу использовать CPack для упаковки этих библиотек в один файл tar. Однако похоже, что в tar-файл будут включены только последние результаты сборки cmake.

Есть ли идея для этой проблемы?

Вот часть моего CMakeLists.txt:

install(FILES api_cpp.h api_c.h  DESTINATION api_lib/include)
install(TARGETS lib
ARCHIVE DESTINATION api_lib/${lib_folder}
LIBRARY DESTINATION api_lib/${lib_folder})

INCLUDE(CPack)
SET(CPACK_GENERATOR "TGZ")

person Qing Liu    schedule 14.01.2020    source источник


Ответы (1)


Очевидно, вы используете генератор одной конфигурации — это означает, что вы не можете иметь более одной конкретной конфигурации сборки в одном и том же каталоге сборки. На самом деле проблема существует даже для многоконфигурационных генераторов (по крайней мере, для CMake ‹ 3.16).

Чтобы сделать пакет, нужно запустить CMake, который генерирует файлы сборки, затем собрать проект и, наконец, можно сделать пакет (например, с make package). Последнее действие запускает CPack, который выполняет make install DESTDIR=<some-temporary-dir>, а затем cpack просто сжимает каталог в архив. Таким образом, имея каталог сборки с единственной конфигурацией, невозможно иметь архив с несколькими из них.

Чтобы сделать вашу потребность возможной, вы должны запустить CMake 4 раза, выполнив установку в одно и то же место, а затем упаковать этот каталог в пакет. Это можно сделать с помощью CMake + CPack, но ИМХО проще сделать с помощью тривиального сценария оболочки :)

person zaufi    schedule 07.05.2020