Files
gradle-examples/doc/16_c.md
2025-02-22 01:13:24 +09:00

3.8 KiB

C 프로젝트

Gradle은 주로 Java, Kotlin과 같은 JVM 언어를 위한 빌드 도구로 알려져 있지만, C/C++ 프로젝트도 빌드할 수 있는 강력한 기능을 제공한다. Gradle의 cpp-application 또는 cpp-library 플러그인을 사용하면 C 프로젝트의 빌드를 자동화할 수 있다.

Gradle 프로젝트 설정

C 프로젝트를 Gradle로 빌드하려면 먼저 Gradle 프로젝트를 초기화해야 한다.

gradle init

이후 "Application" 또는 "Library" 유형을 선택하고, 언어로 C++을 선택할 수 있다. 하지만, 직접 build.gradle.kts 파일을 작성해도 된다.

Gradle을 사용하는 C 프로젝트의 기본적인 디렉터리 구조는 다음과 같다.

C-Project/
├── src/
│   ├── main/
│   │   ├── c/
│   │   │   ├── main.c
│   │   │   ├── utils.c
│   │   │   ├── utils.h
│   ├── test/
│   │   ├── c/
│   │   │   ├── test_main.c
│   │   │   ├── test_utils.c
├── build.gradle.kts
├── settings.gradle.kts
├── gradlew
├── gradlew.bat
├── gradle/
└── build/

cpp-application 플러그인을 사용한 C 프로젝트 빌드

Gradle의 cpp-application 플러그인은 실행 가능한 C 프로그램을 만들 때 사용된다.

build.gradle.kts 설정

plugins {
    id("cpp-application")
}

application {
    targetMachines.add(machines.linux.x86_64) // 빌드 타겟 (Linux 64-bit)
    targetMachines.add(machines.windows.x86_64) // Windows 지원 추가
}

tasks.withType<CppCompile>().configureEach {
    compilerArgs.add("-Wall") // 모든 경고 표시
}

이 설정을 통해:

  • cpp-application 플러그인을 적용한다.
  • 빌드할 대상 아키텍처(Windows, Linux)를 지정한다.
  • -Wall 플래그를 추가하여 경고를 활성화한다.

빌드 및 실행

./gradlew build   # 빌드 실행
./build/install/main/debug/main   # 실행 (Linux)
build\install\main\debug\main.exe # 실행 (Windows)

Gradle은 build/install/main/debug/ 폴더에 실행 파일을 생성한다.

cpp-library 플러그인을 사용한 C 라이브러리 프로젝트

라이브러리를 생성할 경우 cpp-library 플러그인을 사용하면 된다.

build.gradle.kts 설정

plugins {
    id("cpp-library")
}

library {
    targetMachines.add(machines.linux.x86_64)
    targetMachines.add(machines.windows.x86_64)
}

라이브러리 코드 (utils.c, utils.h)

utils.h

#ifndef UTILS_H
#define UTILS_H

void print_message();

#endif

utils.c

#include <stdio.h>
#include "utils.h"

void print_message() {
    printf("Hello from the C Library!\n");
}

테스트 추가 (cpp-unit-test 플러그인 사용)

Gradle에서 C 프로젝트에 대한 유닛 테스트를 추가할 수도 있다.

test_main.c

#include <stdio.h>
#include "utils.h"

int main() {
    print_message();
    printf("Test Passed!\n");
    return 0;
}

build.gradle.kts

plugins {
    id("cpp-application")
    id("cpp-unit-test") // 테스트 플러그인 추가
}

application {
    targetMachines.add(machines.linux.x86_64)
    targetMachines.add(machines.windows.x86_64)
}

tasks.withType<CppCompile>().configureEach {
    compilerArgs.add("-Wall")
}

testing {
    suites {
        val test by getting(CppTestSuite::class) {
            targets {
                all {
                    testTask.configure {
                        shouldRunAfter(tasks.named("build"))
                    }
                }
            }
        }
    }
}

테스트 실행

./gradlew check

테스트 결과는 build/reports/tests/test 폴더에 저장된다.