2017-11-29 7 views
0

Android 프로젝트에 포함될 C++ 프로젝트가 있습니다. 이 프로젝트는 행복하게 독립를 구축하지만, 안드로이드 SDK 툴을 구축 할 때 부스트 헤더를 발견 할 때, 그것은 실패Android Studio에서 부스트 헤더를 찾을 수 없습니다.

BOOST_ROOT = ~/manual-software/boost/target 
BOOST_INCLUDEDIR = ~/manual-software/boost 
다음 변수는 CMake 캐시 항목과 환경 변수로 모두 설정

CMake Error at /usr/local/Android/SDK/cmake/3.6.4111459/share/cmake-3.6/Modules/FindBoost.cmake:1753 (message): 
    Unable to find the requested Boost libraries. 
    Unable to find the Boost header files. Please set BOOST_ROOT to the root 
    directory containing Boost or BOOST_INCLUDEDIR to the directory containing 
    Boost's headers. 

나는 FindBoost.cmake에 다음과 같은 라인을 좁혀했습니다

# Look for a standard boost header file. 
    find_path(Boost_INCLUDE_DIR 
    NAMES   boost/config.hpp 
    HINTS   ${_boost_INCLUDE_SEARCH_DIRS} 
    PATH_SUFFIXES ${_boost_PATH_SUFFIXES} 
    ) 

이제 이상한 부분은 내가 만들 동일한 CMake 바이너리를 사용한다는 것입니다 a) Android Studio 단말기에서, b) Android Studio 빌드 도구에서 두 가지 결과를 얻었습니다. 전 건물은 올바르게, 후자는 실패했습니다. A)에서 지금

message(FATAL_ERROR " 
    Boost_INCLUDE_DIR = ${Boost_INCLUDE_DIR} 
    _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS} 
    _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}") 

그리고 출력 : 난 그냥 find_path 발췌 위 아래에 다음과 같은 메시지를 추가

Boost_INCLUDE_DIR = /home/chris/manual-software/boost 
    _boost_INCLUDE_SEARCH_DIRS = ~/manual-software/boost;~/manual-software/boost/target/include;~/manual-software/boost/target;PATHS;C:/boost/include;C:/boost;/sw/local/include 
    _boost_PATH_SUFFIXES = boost-1_61_0;boost_1_61_0;boost/boost-1_61_0;boost/boost_1_61_0;boost-1_61;boost_1_61;boost/boost-1_61;boost/boost_1_61;boost-1_60_0;boost_1_60_0;boost/boost-1_60_0;boost/boost_1_60_0;boost-1_60;boost_1_60;boost/boost-1_60;boost/boost_1_60;boost-1_59_0;boost_1_59_0;boost/boost-1_59_0;boost/boost_1_59_0;boost-1_59;boost_1_59;boost/boost-1_59;boost/boost_1_59;boost-1_58_0;boost_1_58_0;boost/boost-1_58_0;boost/boost_1_58_0;boost-1_58;boost_1_58;boost/boost-1_58;boost/boost_1_58;boost-1_57_0;boost_1_57_0;boost/boost-1_57_0;boost/boost_1_57_0;boost-1_57;boost_1_57;boost/boost-1_57;boost/boost_1_57;boost-1_56_0;boost_1_56_0;boost/boost-1_56_0;boost/boost_1_56_0;boost-1_56;boost_1_56;boost/boost-1_56;boost/boost_1_56;boost-1_55_0;boost_1_55_0;boost/boost-1_55_0;boost/boost_1_55_0;boost-1_55;boost_1_55;boost/boost-1_55;boost/boost_1_55;boost-1_54_0;boost_1_54_0;boost/boost-1_54_0;boost/boost_1_54_0;boost-1_54;boost_1_54;boost/boost-1_54;boost/boost_1_54;boost-1_53_0;boost_1_53_0;boost/boost-1_53_0;boost/boost_1_53_0;boost-1_53;boost_1_53;boost/boost-1_53;boost/boost_1_53;boost-1_52_0;boost_1_52_0;boost/boost-1_52_0;boost/boost_1_52_0;boost-1_52;boost_1_52;boost/boost-1_52;boost/boost_1_52;boost-1_51_0;boost_1_51_0;boost/boost-1_51_0;boost/boost_1_51_0;boost-1_51;boost_1_51;boost/boost-1_51;boost/boost_1_51;boost-1_50_0;boost_1_50_0;boost/boost-1_50_0;boost/boost_1_50_0;boost-1_50;boost_1_50;boost/boost-1_50;boost/boost_1_50;boost-1_49_0;boost_1_49_0;boost/boost-1_49_0;boost/boost_1_49_0;boost-1_49;boost_1_49;boost/boost-1_49;boost/boost_1_49;boost-1_48_0;boost_1_48_0;boost/boost-1_48_0;boost/boost_1_48_0;boost-1_48;boost_1_48;boost/boost-1_48;boost/boost_1_48 

와 b) :

Boost_INCLUDE_DIR = Boost_INCLUDE_DIR-NOTFOUND 
    _boost_INCLUDE_SEARCH_DIRS = ~/manual-software/boost;~/manual-software/boost/target/include;~/manual-software/boost/target;PATHS;C:/boost/include;C:/boost;/sw/local/include 
    _boost_PATH_SUFFIXES = boost-1_61_0;boost_1_61_0;boost/boost-1_61_0;boost/boost_1_61_0;boost-1_61;boost_1_61;boost/boost-1_61;boost/boost_1_61;boost-1_60_0;boost_1_60_0;boost/boost-1_60_0;boost/boost_1_60_0;boost-1_60;boost_1_60;boost/boost-1_60;boost/boost_1_60;boost-1_59_0;boost_1_59_0;boost/boost-1_59_0;boost/boost_1_59_0;boost-1_59;boost_1_59;boost/boost-1_59;boost/boost_1_59;boost-1_58_0;boost_1_58_0;boost/boost-1_58_0;boost/boost_1_58_0;boost-1_58;boost_1_58;boost/boost-1_58;boost/boost_1_58;boost-1_57_0;boost_1_57_0;boost/boost-1_57_0;boost/boost_1_57_0;boost-1_57;boost_1_57;boost/boost-1_57;boost/boost_1_57;boost-1_56_0;boost_1_56_0;boost/boost-1_56_0;boost/boost_1_56_0;boost-1_56;boost_1_56;boost/boost-1_56;boost/boost_1_56;boost-1_55_0;boost_1_55_0;boost/boost-1_55_0;boost/boost_1_55_0;boost-1_55;boost_1_55;boost/boost-1_55;boost/boost_1_55;boost-1_54_0;boost_1_54_0;boost/boost-1_54_0;boost/boost_1_54_0;boost-1_54;boost_1_54;boost/boost-1_54;boost/boost_1_54;boost-1_53_0;boost_1_53_0;boost/boost-1_53_0;boost/boost_1_53_0;boost-1_53;boost_1_53;boost/boost-1_53;boost/boost_1_53;boost-1_52_0;boost_1_52_0;boost/boost-1_52_0;boost/boost_1_52_0;boost-1_52;boost_1_52;boost/boost-1_52;boost/boost_1_52;boost-1_51_0;boost_1_51_0;boost/boost-1_51_0;boost/boost_1_51_0;boost-1_51;boost_1_51;boost/boost-1_51;boost/boost_1_51;boost-1_50_0;boost_1_50_0;boost/boost-1_50_0;boost/boost_1_50_0;boost-1_50;boost_1_50;boost/boost-1_50;boost/boost_1_50;boost-1_49_0;boost_1_49_0;boost/boost-1_49_0;boost/boost_1_49_0;boost-1_49;boost_1_49;boost/boost-1_49;boost/boost_1_49;boost-1_48_0;boost_1_48_0;boost/boost-1_48_0;boost/boost_1_48_0;boost-1_48;boost_1_48;boost/boost-1_48;b 
oost/boost_1_48 

find_path 다르게 행동입니다 ?

답변

0

이 문제는 CMake의 크로스 컴파일 안전 기능에 달려 있습니다. CMake는 CMAKE_FIND_ROOT_PATH에없는 경로를 찾지 않을 것입니다.이 경로는 Android 교차 컴파일의 경우 관련 SDK 경로로 설정됩니다.

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) 
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) 

에서 :

이 (라이브러리 파일이 대상 아키텍처와 호환되는지 조심) 호스트 시스템에서 라이브러리를 사용하려면 시스템의 루트 및 찾기 루트 경로를 모두 사용 찾을 수 있어야합니다 이 경우에는 CMAKE_FIND_ROOT_PATH_MODE_INCLUDE 만 필요합니다.