Как использовать CPack для упаковки нескольких результатов сборки cmake? - PullRequest
0 голосов
/ 14 января 2020

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

Есть какие-нибудь идеи для этой проблемы?

Вот часть моего 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")

1 Ответ

0 голосов
/ 07 мая 2020

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

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

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

...