내 cmake 기반 C++ 프로젝트 중 하나에 대한 크로스 컴파일 문제로 고민하고 있습니다.CMake ARMV5 용 사용자 정의 프로젝트를 크로스 컴파일
내 프로젝트는 많은 외부 라이브러리를 사용합니다. 내가 구축하고 타겟 환경 (sshfs-mounte입니다 : 빌드 할 때마다 나는 라이브러리를 빌드 할 때마다 즉시 대상에 설치합니다.), Boog, Glog, Protobuf, Gtest 등등 .
내 프로젝트를 빌드 할 때 문제가 발생하고 변수 CMAKE_FIND_ROOT_PATH
사용과 관련이있는 것으로 보입니다.
실제로 빌드하고 설치 한 종속성 중 일부는 $TARGET_FS/usr/lib
이고 일부는 $TARGET_FS/usr/local/lib
입니다. 나는 cmake가 앞서 언급 한 변수를 이용하여 모든 것을 찾을 수있게하지 못했습니다.
저는 현재 다음과 같은 내용으로, 크로스 컴파일 cmake 파일, toolchain-arm.cmake
의 사용을 만들고있어 :
SET(TARGET_CC arm-linux-gnueabi-gcc-4.6)
SET(TARGET_CXX arm-linux-gnueabi-g++-4.6)
SET(CMAKE_CXX_FLAGS "-fpic -ffunction-sections -funwind-tables -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -Wa,--noexecstack")
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER ${TARGET_CC})
SET(CMAKE_CXX_COMPILER ${TARGET_CXX})
SET(CMAKE_FIND_ROOT_PATH "${TARGET_FS}/usr/local")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
내가 cmake 프로세스를 호출
cmake -DTARGET_FS=<path/to/target/fs> -DCMAKE_BUILD_TYPE=optimized -DCMAKE_TOOLCHAIN_FILE=../../Cross/toolchain-arm.cmake ../../
CMake 불평 다음 명령을 실행하여 몇 가지 누락 된 종속성에 대해 : find_root_path
에있는 컴파일러에 대한 내 힌트는 ${TARGET_FS}/usr/local/lib
인데,이 동작이 다소 기대된다고 생각하면 ${TARGET_FS}/usr/lib
에있는 것입니다. CMAKE_FIND_ROOT_PATH
에 여러 경로를 지정하는 방법이 필요하지만 단순히 공백으로 구분하고 큰 따옴표로 묶어야합니다 (SET(CMAKE_FIND_ROOT_PATH "${TARGET_FS}/usr/local ${TARGET_FS}/usr")
).
누구든지이 문제와 관련하여 어떤 힌트를 얻을 수 있습니까? (? 해결) : 나는 완전히 오전 세르게이의 의견에
현재 설치 응답
편집이 출력을
Boost Libraries Found:
$TARGET_FS/usr/local/lib/libboost_regex.so;
$TARGET_FS/usr/local/lib/libboost_date_time.so;
$TARGET_FS/usr/local/lib/libboost_filesystem.so;
$TARGET_FS/usr/local/lib/libboost_program_options.so;
$TARGET_FS/usr/local/lib/libboost_system.so;
$TARGET_FS/usr/local/lib/libboost_signals.so;
$TARGET_FS/usr/local/lib/libboost_thread.so;
pthread
Boost Includes Found: $TARGET_FS/usr/local/include
COMPILER IS is /usr/bin/arm-linux-gnueabi-g++-4.6
CMAKE_BUILD_TYPE is optimized
Building HAL, platform is: X86
-- Found PROTOBUF: $TARGET_FS/usr/local/lib/libprotobuf.so
-- Looking for include files CMAKE_HAVE_PTHREAD_H
-- Looking for include files CMAKE_HAVE_PTHREAD_H - found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CRYPTO++
linked by target "<target_1>" in directory <directory_1>
DUMBNET
linked by target "<target_2>" in directory <directory_2>
JSONCPP
linked by target "<target_3>" in directory <directory_3>
NET
linked by target "<target_4>" in directory <directory_4>
SNMP_LIB
linked by target "<target_5>" in directory <directory_5>
UHD
linked by target "<target_6>" in directory <directory_6>
편집 2
는 사건이 발생했다 이상한 뭔가 제공 이미 시도했지만 목표 파일 시스템의 루트 디렉토리를 다음과 같이 설정했습니다. (/usr
이나 /usr/local
도 붙이지 않음) cmake는 필요한 모든 경로를 찾을 수 있습니다. 이전 cmake 실행 잔여 캐시가 작동하지 못하게 할 수 있습니까?
문제는 깨끗하지 않습니다. cmake 출력을 제공해 주시겠습니까? 또한 AFAIR CMAKE_FIND_ROOT_PATH는 디렉토리 목록이므로 set (CMAKE_FIND_ROOT_PATH "$ {TARGET_FS}/usr/local" "$ {TARGET_FS}/usr")을 사용해야합니다. NOTES http://cmake.org/cmake/help/v2.8.11/cmake.html#command:list –
예를 참조하십시오. CmakeLists.txt를 편집 한 후에 CMakeCache를 삭제하지 않으면 가끔 발생합니다. –