У меня есть простой проект, который я кросс-компилирую на Windows для Linux.
Я успешно собираю, устанавливаю и упаковываю проект в tarball с помощью CPack.
Теперь я бы хотел добавить зависимости времени выполнения (libc, libcrypto, ibpthread и т. Д.) Из моего кросс-инструментария в tarball.
На первый взгляд кажется, что include(InstallRequiredSystemLibraries)
должно сработать. Однако я не могу заставить cmake скопировать RequiredSystemLibraries
в выходную папку. Кроме того, приведенное ниже сообщение трассировки всегда возвращает пустое значение CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
.
.
Как работает механизм include(InstallRequiredSystemLibraries)
при использовании кросс-цепочки инструментов? Как этот механизм определяет зависимости времени выполнения для моего приложения Linux?
Вот мой проект CMakeLists.txt
:
cmake_minimum_required(VERSION 3.12)
project(Test_App CXX)
[...]
add_subdirectory(Test_App)
[...]
# Set packagement management configuration
set(CPACK_GENERATOR "TBZ2")
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
include (InstallRequiredSystemLibraries)
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "os_dep")
set(CPACK_SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR})
include (CPack)
message(STATUS "CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS :
${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}")
Это мой файл кросс-цепочки:
cmake_minimum_required(VERSION 3.12)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
# specify the cross compiler
set(tools c:/cygwin64/opt/x-tools/x86_64-kepware-linux-gnu)
set(CMAKE_C_COMPILER ${tools}/bin/x86_64-kepware-linux-gnu-gcc.exe)
set(CMAKE_CXX_COMPILER ${tools}/bin/x86_64-kepware-linux-gnu-g++.exe)
set(CMAKE_SYSROOT ${tools}/x86_64-kepware-linux-gnu/sysroot)
# specify the target environment
set(CMAKE_FIND_ROOT_PATH ${tools}/x86_64-kepware-linux-gnu/sysroot)
# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
Вот так я вызываю CMake:
cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=./cmake/crosstoolchain_x86_64-kepware-linux-gnu.cmake -DCMAKE_INSTALL_PREFIX=<where ever you want> ..
make
make install
cpack