2015-01-20 46 views
4

我已经开始在Android Studio中使用Android NDK进行开发,但由于它没有适当的C++支持,所以它非常痛苦。所以我尝试创建一个cmake项目来构建我的东西。我已经使用android-cmake,迄今为止效果很好,除了<android/log.h>,<android/native_window.h>以及可能找不到的所有<android/*>夹杂物。 IDE(CLion)也将它们标记为失踪。我在CMakeLists.txt中错过了什么吗?使用cmake构建时未找到android/log.h

这里的CMakeLists.txt:

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当我建立工作室,工作正常:

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

实际的问题是在一个android-cmake文件中出现错误,而CMakeLists.txt中的错误cmake变量。它怎么发生的?可能我已经跟随了旧版android-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

可能包含目录不正确/存在。

您可以检查包括给予用make编译器迪尔斯VERBOSE = 1

你可以在你的cmake与include_directories添加它(...) 位置添加了android/log.h文件所在的路径。

相关问题