cmake: как использовать InstallRequiredSystemLibraries в Linux в среде кросс-компиляции - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть простой проект, который я кросс-компилирую на 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...