8

我正在尝试使用 android ndk(在 Windows 上)构建一个项目,并且我在源文件(LOCAL_SRC_FILES在 Android.mk 中)方面遇到了一些问题

我正在尝试使用父文件夹的相对路径,例如

LOCAL_SRC_FILES := ../../../src/main.cpp

并且在运行 ndk_build.cmd 时,它会输出以下错误:

Compile++ thumb : GTP <= main.cpp
The system cannot find the file specified.
make: *** [obj/local/armeabi/objs/GTP/__/__/__/src/.o] Error 1

所以我尝试使用绝对路径:

LOCAL_SRC_FILES := D:/Path/To/src/main.cpp

不幸的是,这不起作用,因为:Windows 上的原因问题

有什么方法可以在相对目录(或绝对目录)中指定源文件?我问的原因是因为我想尽可能避免创建到 src 文件夹的符号链接。

4

3 回答 3

11

根据 ndk 文档,建议使用相对路径和以下宏(Android.mk 使用 make 文件的语法):

  LOCAL_PATH := $(call my-dir)

An Android.mk file must begin with the definition of the LOCAL_PATH variable.
It is used to locate source files in the development tree. In this example,
the macro function 'my-dir', provided by the build system, is used to return
the path of the current directory (i.e. the directory containing the
Android.mk file itself).

因此,您可以将 LOCAL_SRC_FILES 替换为类似于:

LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../src/main.cpp
于 2013-11-01T06:41:02.747 回答
1

使用分布在许多目录中的源文件的最简单方法是为每个目录或目录组编译单独的静态库。在 NDK 中,这些库称为“模块”。对于每个模块,您在 Android.mk 中指定 LOCAL_SRC_PATH。LOCAL_SRC_FILES 与此路径相关。需要注意的是 LOCAL_C_INCLUDES 等是相对于项目根目录(通常是 jni 目录之上的那个)。

您的项目中可以有许多 Android.mk 文件,但您可以使用单个 Android.mk 构建许多模块。

于 2013-11-01T05:13:14.757 回答
0

尝试这个:

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := YOUR_SRC_IN_LIB_JNI
于 2013-11-01T06:51:30.237 回答