# 변수 선언
is_debug = true
project_name = "my_project"
# 리스트 선언과 추가
sources = [ "main.cc", "utils.cc" ]
sources += [ "helper.cc" ]
executable("my_app") {
sources = [ "main.cc", "app.cc" ]
deps = [ ":my_lib" ] # 의존 라이브러리
}
static_library("my_lib") {
sources = [ "lib.cc" ]
}
https://github.com/google/open-dice/blob/main/BUILD.gn
pw_static_library("dice_with_boringssl_ed25519_ops") {
public = [
"include/dice/dice.h",
"include/dice/utils.h",
]
sources = [
"src/boringssl_cert_op.c",
"src/boringssl_ed25519_ops.c",
"src/boringssl_hash_kdf_ops.c",
"src/clear_memory.c",
"src/dice.c",
"src/utils.c",
]
deps = [ "//third_party/boringssl:crypto" ]
all_dependent_configs = [
":boringssl_ed25519_ops_config",
":default_profile",
]
}
libdice_with_boringssl_ed25519_ops.a 를 생성하는 블록public_deps, data_deps 등 다양한 의존성 type이 있다config("debug_config") {
defines = [ "DEBUG=1" ]
include_dirs = [ "include/debug" ]
}
static_library("lib_with_debug") {
sources = [ "lib.cc" ]
all_dependent_configs = [ ":debug_config" ]
}
shared_library("hello_shared") {
sources = [
"hello_shared.cc",
"hello_shared.h",
]
defines = [ "HELLO_SHARED_IMPLEMENTATION" ]
}
gn gen out 명령어를 실행하면 GN이 out/build.ninja 파일을 생성ninja -C out 명령어로 Ninja가 build.ninja 파일을 읽고 컴파일, 링킹 등 실제 빌드를 수행# 컴파일 규칙 정의
rule compile
command = gcc -c $in -o $out
# 링크 규칙 정의
rule link
command = gcc $in -o $out
# 빌드 타겟 정의
build main.o: compile main.c
build app: link main.o
# 전체 빌드
ninja
# 특정 타겟만 빌드
ninja app
# 4개 CPU 코어로 병렬 빌드
ninja -j4
# 빌드 통계 표시
ninja -d stats
# 의존성 설명
ninja -d explain
# 빌드 과정 상세 정보
ninja -v
cmake_minimum_required(VERSION 3.10)
project(HelloNinja)
add_executable(hello main.cpp)
# 빌드 디렉토리 생성 후 이동
mkdir build && cd build
# CMake로 Ninja 빌드 파일 생성
cmake -G Ninja ..
# Ninja로 빌드
ninja
# 또는 CMake를 통해 빌드
cmake --build .
| 조합 | 설명 |
|---|---|
| CMake + Ninja | CMake로 Ninja 파일 생성, Ninja로 빌드 |
| CMake + Makefile | CMake로 makefile 파일 생성, GNU Make로 빌드 |
| GN + Ninja | GN으로 Ninja 파일 생성, Ninja로 빌드 |