ndk-build

ndk-build 스크립트는 NDK의 Make 기반 빌드 시스템을 사용하는 프로젝트를 빌드합니다. ndk-build에서 사용되는 Android.mkApplication.mk 구성에 대한 좀 더 구체적인 문서가 있습니다.

내부 기능

ndk-build 스크립트를 실행하는 것은 다음 명령을 실행하는 것과 같습니다.

$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>

$GNUMAKE는 GNU Make 3.81 이상을 가리키고, <ndk>는 NDK 설치 디렉토리를 포인팅합니다. 이 정보를 사용하여 다른 셸 스크립트에서 ndk-build를 호출하거나 자신의 메이크파일을 호출할 수도 있습니다.

명령줄에서 호출

ndk-build 스크립트는 최상위 NDK 설치 디렉토리에 있습니다. 명령줄에서 이 파일을 실행하려면 애플리케이션 프로젝트 디렉토리나 그 아래 위치에 있는 상태에서 호출하세요. 예:

$ cd <project>
$ <ndk>/ndk-build

이 예시에서는 <project>가 프로젝트의 루트 디렉토리를 포인팅하고, <ndk>는 NDK를 설치한 디렉토리입니다.

옵션

ndk-build에 대한 모든 매개변수는 NDK 빌드 스크립트를 실행하는 기본 GNU make 명령어로 직접 전달됩니다. ndk-build와 옵션을 ndk-build <option> 형식으로 결합합니다. 예:

$ ndk-build clean

사용할 수 있는 옵션은 다음과 같습니다.

clean
이전에 생성된 바이너리를 모두 삭제합니다.

참고:Mac OS에서 ndk-build clean를 여러 개의 병렬 실행을 구동하면 다음의 메시지를 비롯한 빌드 오류가 발생할 수 있습니다.

rm: fts_read: No such file or directory

이 문제를 해결하려면 -jN 한정자를 사용하지 않거나, N에 작은 값(예: 2)을 선택하는 것이 방법입니다.

V=1
빌드를 시작하고 빌드 명령어를 표시합니다.
-B
강제로 완전히 다시 빌드합니다.
-B V=1
강제로 완전히 다시 빌드하고 빌드 명령어를 표시합니다.
NDK_LOG=1
내부 NDK 로그 메시지를 표시합니다(NDK 자체를 디버깅할 때 사용됨).
NDK_DEBUG=1
디버깅 가능한 빌드를 강제 적용합니다(표 1 참조).
NDK_DEBUG=0
릴리스 빌드를 강제 적용합니다(표 1 참조).
NDK_HOST_32BIT=1
툴체인을 항상 32비트 모드에서 사용합니다(64비트 및 32비트 툴체인 참조).
NDK_APPLICATION_MK=<file>
NDK_APPLICATION_MK 변수가 포인팅하는 특정 Application.mk 파일을 사용하여 빌드합니다.
-C <project>
<project>에 있는 프로젝트 경로에 맞춰 네이티브 코드를 빌드합니다. 터미널에 cd하기를 원치 않는 경우에 유용합니다.

디버깅 가능한 빌드와 릴리스 빌드

NDK_DEBUG 옵션을 사용하고, 특정 상황에서는 AndroidManifest.xml을 사용하여 디버그 빌드나 릴리스 빌드, 최적화 관련 동작, 기호 포함을 지정합니다. 표 1은 가능한 각 설정 조합의 결과를 나타낸 것입니다.

표 1. NDK_DEBUG(명령줄)와 android:debuggable(매니페스트) 조합의 결과

Manifest SettingNDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG not specified
android:debuggable="true" Debug; Symbols; Optimized*1 Debug; Symbols; Not optimized*2 (same as NDK_DEBUG=1)
android:debuggable="false"Release; Symbols; Optimized Release; Symbols; Not optimizedRelease; No symbols; Optimized*3

*1: 프로파일링에 유용함.
*2: ndk-gdb 실행 기본값.
*3: 기본 모드.

참고: NDK_DEBUG=0APP_OPTIM=release와 동일하며 -O2로 컴파일합니다. NDK_DEBUG=1Application.mkAPP_OPTIM=debug와 동일하며 -O0로 컴파일합니다. APP_OPTIM에 대한 자세한 내용은 Application.mk를 참조하세요.

예를 들어, 명령줄의 구문은 다음과 같습니다.

$ ndk-build NDK_DEBUG=1

64비트 및 32비트 툴체인

일부 툴체인은 64비트 버전과 32비트 버전에 모두 제공됩니다. 예를 들어, <ndk>/toolchain/<name>/prebuilt/<ndk>/prebuilt/ 디렉토리는 각각 32비트 모드와 64비트 모드에서 Linux 도구를 위한 linux-x86 폴더와 linux-x86_64 폴더를 모두 포함할 수 있습니다. 호스트 OS가 64비트 버전의 툴체인을 지원하는 경우 ndk-build 스크립트는 자동으로 이 버전을 선택합니다. 개발 환경 또는 ndk-build 명령줄에서 NDK_HOST_32BIT=1을 사용하여 32비트 툴체인을 사용하도록 강제 적용할 수 있습니다.

참고로, 64비트 도구는 호스트 리소스를 더욱 잘 활용하면서도(예: 속도가 더 빠르고 더 큰 프로그램을 처리함), Android용 32비트 바이너리를 생성할 수 있습니다.

요구사항

보통 ndk-build 또는 NDK 를 사용하려면 GNU Make 3.81 이후 버전이 필요합니다. 빌드 스크립트는 비호환 Make 도구를 발견하면 오류 메시지를 생성합니다.

설치된 GNU Make 3.81이 있지만 기본 make 명령어가 실행되지 않으면 환경에서 GNUMAKE을 정의하여 이것을 포인팅하도록 한 다음 ndk-build를 실행하세요 . 예:

$ export GNUMAKE=/usr/local/bin/gmake
$ ndk-build

$NDK/prebuilt/<OS>/bin/의 다른 호스트 미리 빌드된 도구를 재정의하려면 다음과 같은 환경 변수를 사용하면 됩니다.

$ export NDK_HOST_AWK=<path-to-awk>
$ export NDK_HOST_ECHO=<path-to-echo>
$ export NDK_HOST_CMP=<path-to-cmp>