【问题标题】:Android.mk relative or absolute paths?Android.mk 相对路径还是绝对路径?
【发布时间】:2013-11-01 03:42:01
【问题描述】:

我正在尝试使用 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 文件夹的符号链接。

【问题讨论】:

    标签: android c++ android-ndk


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

        • 什么是YOUR_SRC_IN_LIB_JNI
        猜你喜欢
        • 2015-11-13
        • 2011-11-25
        • 2019-09-09
        • 2018-09-17
        • 2014-03-09
        • 2011-10-16
        • 2012-08-24
        • 1970-01-01
        • 2012-01-11
        相关资源
        最近更新 更多