android.mk sdl 构建错误

标签 android c++ c android.mk

我查看了一些有关编写 android.mk 文件的问题和“make:*没有规则来制作.o所需的目标.c”**它们都以拼写错误为中心我认为我没有。

这是一个 SDL 项目,可以使用我的 CMake 构建脚本很好地构建,但我就是无法让 android.mk 为我工作。

这是 cmake 中的项目设置

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(blp)
#set(CMAKE_MACOSX_RPATH 1)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)

FIND_PACKAGE(SDL2 REQUIRED)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR})

INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/core_math")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/utils/time_utils")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/utils/resource_utils")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/ren_opengl")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/core_engine")
INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/components/renderable2d")

INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/source/glm/vec3.hpp")

FIND_PACKAGE(SDL2 REQUIRED)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR})

FIND_PACKAGE(SDL2_IMAGE)
INCLUDE_DIRECTORIES(${SDL2_IMAGE_INCLUDE_DIR})

ADD_SUBDIRECTORY(source)
ADD_SUBDIRECTORY(project)

SET(SRC_FILES main.c)
SET(EXTERNAL_TARGET_LIBS ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY})
SET(COMPONENTS renderable2d)
SET(INTERNAL_TARGET_LIBS core_math time_utils resource_utils ren_opengl)

SET(TARGET_LIBS ${INTERNAL_TARGET_LIBS} ${EXTERNAL_TARGET_LIBS} ${COMPONENTS})

FILE(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/resources/)

在项目子文件夹中,我可以创建不同的项目并重用我创建的源动态库。

在源代码中,您可以看到我创建了一堆动态库。最后是动态库以及一个导入所有这些库的 .h 和 .c 类,然后我将这个 .h 文件导入到我的项目中以使用这些库。

现在看看我的 android.mk 文件,它还不是很完整,但这就是我遇到麻烦的地方。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

SDL_PATH := ../SDL

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include/
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/utils/time_utils/

# Add your application source files here...
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
                 utils/time_utils.c \
//removing the above line, core_engine.c throws an import error
//adding the above line I get the error listed at the bottom
                 core_engine/core_engine.c \
                 project.c


LOCAL_SHARED_LIBRARIES := SDL2

LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog

include $(BUILD_SHARED_LIBRARY)

make: *** No rule to make target `/Users/blubee/SDL/android-project/jni/src/time_utils/time_utils.c', needed by `/Users/blubee/SDL/android-project/obj/local/armeabi/objs/main/time_utils/time_utils.o'.  Stop.

每个库都位于其自己的文件夹下,就像这样的项目源代码树

source/components/renderable2d/renderable2d.c /.h
source/core_engine/core_engine.c /.h
source/core_math/mat4_scalar/mat4_scalar.c /.h
source/core_math/vec3_scalar/vec3_scalar.c /.h
source/..
etc...

这可能是构建顺序或我在 android.mk 文件夹中定义源文件的顺序,我不确定。有什么建议么?我还确保我的环境变量或 android.mk 的源文件中没有拼写错误或多余空格

最佳答案

似乎 android.mk 对 header 包含顺序比 cmake 更敏感。

我将我的项目简化为带有 #include "SDL.h"的 main.c,并且构建得很好。

我将从那里开始学习 android.mk,虽然它与 cmake 类似,但更加挑剔。

关于android.mk sdl 构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32039918/

相关文章:

c++ - 双向链表 : value is not inserted at front

c++ - IOCTL_DISK_GET_DRIVE_LAYOUT_EX 工作不正常

c - 是否可以通过循环设置分配的内存的值?

c - 当我给出“否”时,我会得到随机数。 > 55

Android SQLite : nullColumnHack parameter in insert/replace methods

android - SecurityException 阻止我通过将图像的 URI 存储在 SQLIte 数据库中来显示图像

java - 重复包含其他 UI 元素的 LinearLayout 元素并用数据填充它

c++ - 循环内的尾递归如何工作?

android - 在 xamarin 中使用新的 .NET 执行环境

c - 我的程序有什么问题?