Android ndk 使用cmake构建时未找到android/log.h 我开始在Android工作室中用Android NDK开发,但这是一个很大的痛苦,因为它没有一个合适的C++支持。所以我尝试创建一个cmake项目来构建我的东西。到目前为止,我已经使用了它,它运行得很好,除了无法找到,以及可能所有的包含项。IDE(CLion)也因此将它们标记为缺失。我是否缺少CMakeLists.txt中的某些内容

Android ndk 使用cmake构建时未找到android/log.h 我开始在Android工作室中用Android NDK开发,但这是一个很大的痛苦,因为它没有一个合适的C++支持。所以我尝试创建一个cmake项目来构建我的东西。到目前为止,我已经使用了它,它运行得很好,除了无法找到,以及可能所有的包含项。IDE(CLion)也因此将它们标记为缺失。我是否缺少CMakeLists.txt中的某些内容,android-ndk,cmake,Android Ndk,Cmake,以下是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

以下是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启动参数:

-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
这是我在studio中构建时运行良好的原始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

感谢您的帮助。

可能include目录不正确/不存在

您可以使用make VERBOSE=1检查提供给编译器的include dirs

您可以使用include_目录(…)将其添加到cmake中
添加android/log.h文件所在的路径。

实际问题在于一个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)