CMake / C ++: как развернуть двоичный файл с необходимой разделяемой библиотекой? - PullRequest
0 голосов
/ 27 мая 2020

Мне сложно сгенерировать двоичный файл, развернутый с необходимыми разделяемыми библиотеками.

Я создал «привет мир» для подключаемых модулей Qt 5.12, приложение работает должным образом на моем компьютере с Ubuntu 18.04, но make install дает ошибку.

Я пробовал подход fixup_bundle() для разрешения зависимостей.

наб .: Никогда раньше не делал, я новичок в cmake.

cmake_minimum_required(VERSION 3.17)

project(plug-use LANGUAGES CXX)

set(PROJECT_VERSION_MAJOR 1)
set(PROJECT_VERSION_MINOR 0)
set(PROJECT_VERSION_PATCH 0)
set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Widgets REQUIRED)

get_target_property(QT_WIDGETS_LIB Qt5::Widgets LOCATION)
get_filename_component(QT_RUNTIME_DIR "${QT_WIDGETS_LIB}" DIRECTORY)
list(APPEND LIBS_PATH "${QT_RUNTIME_DIR}")
message(path: ${LIBS_PATH})

add_subdirectory(plug)

add_executable(plug-use
        main.cpp
        MainWindow.cpp
        MainWindow.h
        MainWindow.ui
        GenericPluginInterface.h
        )

target_link_libraries(plug-use PUBLIC Qt5::Widgets plug)

set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/../installation)

include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
        EXPORT ${PROJECT_NAME}_export_target
        BUNDLE  DESTINATION ${CMAKE_INSTALL_PREFIX}
                COMPONENT   ${PROJECT_NAME}_RunTime
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
                COMPONENT   ${PROJECT_NAME}_RunTime
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                COMPONENT          ${PROJECT_NAME}_RunTime
                NAMELINK_COMPONENT ${PROJECT_NAME}_Development
        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
                COMPONENT   ${PROJECT_NAME}_Development
        )

set( APPS "\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}" )
set( DIRS ${LIBS_PATH})

install( CODE "
        include(BundleUtilities)
        fixup_bundle( \"${APPS}\" \"\" \"${DIRS}\" )
        " COMPONENT ${PROJECT_NAME}_RunTime)

В терминале набираю:

cmake -B build -S .
cd build
make
make install

И сообщение об ошибке после make install:

-- Install configuration: ""
-- Installing: /media/storage/user/Documents/mitk-test/plug-use/../installation/bin/plug-use
-- Set runtime path of "/media/storage/user/Documents/mitk-test/plug-use/../installation/bin/plug-use" to ""
-- fixup_bundle
--   app='/media/storage/user/Documents/mitk-test/plug-use/../installation/plug-use'
--   libs=''
--   dirs='/usr/lib/x86_64-linux-gnu'
--   ignoreItems=''
-- warning: *NOT* handled - directory/file does not exist...
CMake Error at /usr/local/share/cmake-3.17/Modules/BundleUtilities.cmake:988 (message):
  error: fixup_bundle: not a valid bundle
Call Stack (most recent call first):
  cmake_install.cmake:68 (fixup_bundle)


-- fixup_bundle: done
Makefile:137: recipe for target 'install' failed
make: *** [install] Error 1

Я не знаю, как интерпретировать это сообщение.

...