Android NDK: как разрешить gcc использовать дополнительные каталоги include - PullRequest
21 голосов
/ 08 сентября 2011

Простой вопрос (я использую Android NDK R6 с Cygwin, но это вопрос, касающийся make-файлов и gcc).Предположим, что я поместил в каталог jni / библиотеку в директории mylib_v_1 /.Mylib имеет следующую структуру:

mylib_v_1
   mylib
      include

В каталоге include находятся два файла, myinc1.hpp и myinc2.hpp.В myinc1.hpp есть строка как:

#include <mylib/myinc2.hpp>

, в моем файле .cpp, в каталоге jni /, есть следующая строка:

#include <mylib/myinc1.hpp>

Я хочу настроитьAndroid.mk (или какие другие файлы должны быть настроены), чтобы gcc знал, как использовать, в качестве дополнительного каталога include, jni / mylib_v_1 /, чтобы использовать #include со скобками (вместо двух файлов в моемв реальном случае есть много .hpp, которое включает в себя множество других .hpp с обозначениями в скобках).

Как я могу это сделать?

Thx.

Ps.Если в файле .cpp я изменяю включение следующим образом:

#include "mylib/myinc1.hpp"

gcc find myinc1.hpp, но при обработке находит второе включение:

#include  <mylib/myinc2.hpp>

и останавливаемся там, говоря, что он не может найти файл myinc2.hpp.

Ответы [ 2 ]

26 голосов
/ 12 августа 2012

Вариант 1:

Добавьте одну из следующих строк в ваш Android.mk внутри выбранного вами модуля:

   LOCAL_C_INCLUDES := /path/to/your/includes # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += /path/to/your/includes # preserve previous includes

При необходимости вы можете создать переменную окружения, указывающую на '/ path / to / your / includes', и включить ее следующим образом:

   LOCAL_C_INCLUDES := $(MYLIB_INCLUDES_PATH) # ignore previous includes
                                              # OR
   LOCAL_C_INCLUDES += $(MYLIB_INCLUDES_PATH) # preserve previous includes

Вариант 2:

  1. Скопируйте всю папку со всеми заголовочными файлами в ней (mylib) в папку 'jni' вашего проекта.

  2. Добавьте следующую строку в ваш Android.mk внутри выбранного вами модуля:

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/mylib
    

    или

    LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
    

В зависимости от того, есть ли предыдущие включения или нет.

Вариант 3:

Установите плагин CDT для Eclipse и добавьте абсолютный путь к каталогу 'mylib' к путям включения вашего проекта. Вот отличный учебник, который показывает все необходимые шаги.

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

3 голосов
/ 08 сентября 2011

Вы можете добавить C include пути в вашем Android.mk, используя:

common_CFLAGS := -Ijni/mylib/include

Любые дополнительные пути требуют другого параметра -I.

...