2025-02-22T01:13:24
This commit is contained in:
156
doc/16_c.md
Normal file
156
doc/16_c.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# 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<CppCompile>().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 <stdio.h>
|
||||
#include "utils.h"
|
||||
|
||||
void print_message() {
|
||||
printf("Hello from the C Library!\n");
|
||||
}
|
||||
```
|
||||
|
||||
## 테스트 추가 (`cpp-unit-test` 플러그인 사용)
|
||||
Gradle에서 C 프로젝트에 대한 유닛 테스트를 추가할 수도 있다.
|
||||
|
||||
`test_main.c`
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#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<CppCompile>().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` 폴더에 저장된다.
|
||||
|
||||
Reference in New Issue
Block a user