Android.mk相对路径还是绝对路径?

时间:2013-11-01 03:42:02

标签: android c++ android-ndk

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

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

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

不幸的是,这不起作用,因为: causes issues on windows

有没有办法在相对目录(或绝对目录)中指定源文件?我问的原因是因为我想避免在可能的情况下建立到src文件夹的符号链接。

3 个答案:

答案 0 :(得分:10)

根据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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

试试这个:

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := YOUR_SRC_IN_LIB_JNI