Android NDK:如何让gcc使用额外的include目录

Luk*_*uke 21 gcc makefile android-ndk

一个简单的问题(我使用android NDK r6与cygwin,但这是一个关于makefile和gcc的问题).假设我在dni mylib_v_1 /下面的jni /目录下放了一个库.Mylib的结构如下:

mylib_v_1
   mylib
      include
Run Code Online (Sandbox Code Playgroud)

在include目录下有两个文件myinc1.hpp和myinc2.hpp.在myinc1.hpp中有一行:

#include <mylib/myinc2.hpp>
Run Code Online (Sandbox Code Playgroud)

在我的.cpp文件中,在jni /目录下,有以下行:

#include <mylib/myinc1.hpp>
Run Code Online (Sandbox Code Playgroud)

我想设置Android.mk(或者需要设置其他文件)以便让gcc知道使用,作为附加的包含目录,jni/mylib_v_1 /以便使用#include括号(而不是两个)文件,在我的实际案例中有很多.hpp,其中包括许多带括号表示法的其他.hpp).

我怎样才能做到这一点?

谢谢.

PS.如果在.cpp文件中我以这种方式更改include:

#include "mylib/myinc1.hpp"
Run Code Online (Sandbox Code Playgroud)

gcc找到myinc1.hpp但是,在处理它时,它找到第二个包括:

#include  <mylib/myinc2.hpp>
Run Code Online (Sandbox Code Playgroud)

并停在那里,说它无法找到文件myinc2.hpp.

Ivo*_*Ivo 27

选项1:

将以下行之一添加到您选择的模块中的Android.mk:

   LOCAL_C_INCLUDES := /path/to/your/includes # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += /path/to/your/includes # preserve previous includes
Run Code Online (Sandbox Code Playgroud)

如有必要,您可以创建一个指向'/ path/to/your/includes'的环境变量,并将其包含如下:

   LOCAL_C_INCLUDES := $(MYLIB_INCLUDES_PATH) # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += $(MYLIB_INCLUDES_PATH) # preserve previous includes
Run Code Online (Sandbox Code Playgroud)

选项2:

  1. 将包含所有头文件(mylib)的完整文件夹复制到项目的"jni"文件夹中.

  2. 将以下行添加到您选择的模块内的Android.mk中:

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/mylib
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
    
    Run Code Online (Sandbox Code Playgroud)

取决于是否有先前包括.

选项3:

安装Eclipse的CDT插件,并将'mylib'目录的绝对路径添加到项目的包含路径中.这是一个很棒的教程,显示了所有必要的步骤.

http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/


Bur*_*rad 3

您可以使用以下命令在 Android.mk 中添加 C 包含路径:

common_CFLAGS := -Ijni/mylib/include
Run Code Online (Sandbox Code Playgroud)

任何其他路径都需要另一个 -I 选项。

  • 好的,我在这里学习东西。首先,我启动了 NDK_BUILD V=1。这将强制构建过程显示如何调用 gcc。我尝试使用 common_FLAGS 和 LOCAL_C_INCLUDES 但没有成功(事实上,没有 -I cmd 行选项显示 /mylib =&gt; 这是真正的问题)。从文档中我学到了另一种包含内容的方法:现在我使用 LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/mylib。它立即起作用了。但建议改用 LOCAL_C_INCLUDES。该死... (2认同)