# C 프로젝트 Gradle은 주로 Java, Kotlin과 같은 JVM 언어를 위한 빌드 도구로 알려져 있지만, **C/C++ 프로젝트도 빌드할 수 있는 강력한 기능**을 제공한다. Gradle의 **`cpp-application`** 또는 **`cpp-library`** 플러그인을 사용하면 C 프로젝트의 빌드를 자동화할 수 있다. ## Gradle 프로젝트 설정 C 프로젝트를 Gradle로 빌드하려면 먼저 Gradle 프로젝트를 초기화해야 한다. ```sh 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` 설정 ```kotlin plugins { id("cpp-application") } application { targetMachines.add(machines.linux.x86_64) // 빌드 타겟 (Linux 64-bit) targetMachines.add(machines.windows.x86_64) // Windows 지원 추가 } tasks.withType().configureEach { compilerArgs.add("-Wall") // 모든 경고 표시 } ``` 이 설정을 통해: - `cpp-application` 플러그인을 적용한다. - 빌드할 대상 아키텍처(Windows, Linux)를 지정한다. - `-Wall` 플래그를 추가하여 경고를 활성화한다. ### 빌드 및 실행 ```sh ./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` 설정 ```kotlin plugins { id("cpp-library") } library { targetMachines.add(machines.linux.x86_64) targetMachines.add(machines.windows.x86_64) } ``` ### 라이브러리 코드 (`utils.c`, `utils.h`) `utils.h` ```c #ifndef UTILS_H #define UTILS_H void print_message(); #endif ``` `utils.c` ```c #include #include "utils.h" void print_message() { printf("Hello from the C Library!\n"); } ``` ## 테스트 추가 (`cpp-unit-test` 플러그인 사용) Gradle에서 C 프로젝트에 대한 유닛 테스트를 추가할 수도 있다. `test_main.c` ```c #include #include "utils.h" int main() { print_message(); printf("Test Passed!\n"); return 0; } ``` `build.gradle.kts` ```kotlin plugins { id("cpp-application") id("cpp-unit-test") // 테스트 플러그인 추가 } application { targetMachines.add(machines.linux.x86_64) targetMachines.add(machines.windows.x86_64) } tasks.withType().configureEach { compilerArgs.add("-Wall") } testing { suites { val test by getting(CppTestSuite::class) { targets { all { testTask.configure { shouldRunAfter(tasks.named("build")) } } } } } } ``` ### 테스트 실행 ```sh ./gradlew check ``` 테스트 결과는 `build/reports/tests/test` 폴더에 저장된다.