2015-01-20 1 views
4

Android Studio에서 Android NDK로 개발을 시작했지만 적절한 C++ 지원이 없으므로 큰 어려움이 있습니다. 그래서 나는 내 물건을 만들기 위해 cmake 프로젝트를 만들려고 노력합니다. 나는 android-cmake을 사용했으며 <android/log.h>, <android/native_window.h> 및 아마도 <android/*> 인 클루 젼을 찾을 수 없다는 것을 제외하고 지금까지는 잘 작동합니다. IDE (Clion)도 그것 때문에 누락 된 것으로 표시합니다. CMakeLists.txt에 뭔가 빠졌습니까?cmake로 빌드 할 때 안드로이드/log.h를 찾을 수 없습니다.

cmake_minimum_required(VERSION 2.8.4) 
project(App) 

SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 

include(AndroidNdkGdb) 
include(AndroidNdkModules) 

android_ndk_gdb_enable() 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/src/main/libs/armeabi-v7a) 

set(LIBRARY_DEPS GLESv2 android log) 

include_directories(${PROJECT_SOURCE_DIR}/src/main/lib/armeabi-v7a/freetype/include/freetype2) 

file(GLOB_RECURSE SRCS *.cpp) 
file(GLOB_RECURSE HDRS *.h) 

add_library(nativeegl SHARED ${SRCS} ${HDRS}) 
target_link_libraries(nativeegl log android) 

android_ndk_gdb_debuggable(nativeegl) 

및 cmake 출시 PARAMS :

-DCMAKE_TOOLCHAIN_FILE=android.toolchain.cmake \ 
-DANDROID_NDK=/opt/android-ndk -DCMAKE_BUILD_TYPE=Debug \ 
-DANDROID_ABI="armeabi-v7a" -DANDROID_STL=gnustl_static \ 
-DANDROID_NATIVE_API_LEVEL=android-21 

그리고 이것이 내가 스튜디오에서 빌드 할 때 잘 작동 원래 Android.mk입니다 : 여기

은 CMakeLists.txt입니다

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := nativeegl 
LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/*.cpp)) 

LOCAL_C_INCLUDES := 
LOCAL_CFLAGS := -std=c++11 -O2 -Wtype-limits -Wmissing-field-initializers -Wreturn-type -Wuninitialized 

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2 
LOCAL_STATIC_LIBRARIES := android_native_app_glue ndk_helper freetype 

include $(BUILD_SHARED_LIBRARY) 

$(call import-add-path,$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI)) 
$(call import-module,freetype) 

및 Application.mk :

APP_STL := gnustl_static 
APP_PLATFORM := android-10 
APP_ABI := armeabi-v7a 

귀하의 도움에 감사드립니다.

답변

3

실제 문제는 CMakeLists.txt의 한 android-cmake 파일과 cmake 변수에서 오류가 발생했습니다. 어떻게이 일이 일어 났어요? 아마 나는 안드로이드 - cmake의 이전 버전에 대한 튜토리얼을 따라했습니다. 다음은 CMakeLists.txt의 모습입니다 :

cmake_minimum_required(VERSION 2.8.4) 
project(App) 

SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 

include(AndroidNdkGdb) 
include(AndroidNdkModules) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/src/main/libs/armeabi-v7a) 

set(LIBRARY_DEPS GLESv2 android log EGL) 

include_directories(${PROJECT_SOURCE_DIR}/src/main/lib/armeabi-v7a/freetype/include/freetype2) 

file(GLOB_RECURSE SRCS *.cpp) 
file(GLOB_RECURSE HDRS *.h) 

android_ndk_gdb_enable() 

add_library(nativeegl SHARED ${SRCS} ${HDRS}) 
target_link_libraries(nativeegl log android) 

android_ndk_gdb_debuggable(nativeegl) 
0

아마도 include dir은 올바르지 않거나 없습니다.

당신은이 메이크업과 컴파일러 주어 DIRS을 포함 확인할 수 있습니다 VERBOSE = 1

당신은 include_directories의로 cmake에 추가 할 수 있습니다

(...) 안드로이드/log.h 파일이있는 경로를 추가 .

관련 문제