여러 파일 컴파일하기
여러 파일로 프로그램을 빌드해 보세요.
여러 파일 컴파일하기은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
소스에서 프로그램으로
여러 파일로 구성된 C 소스를 실행 파일로 만드는 과정은 컴파일과 연결이라는 두 단계로 이루어집니다.
각 .c 파일은 개별적으로 컴파일되어 목적 파일이 됩니다. 그런 다음 링커가 모든 목적 파일을 결합하고 파일 사이의 참조를 해결하여 실행 가능한 하나의 프로그램으로 만듭니다.
한 번에 빌드하기
가장 간단한 방법은 모든 소스 파일을 한꺼번에 gcc에 전달하는 것입니다. 컴파일러가 각각을 빌드한 다음 자동으로 연결합니다.
-o 플래그는 출력 프로그램의 이름을 지정합니다. 모든 .c 파일을 나열하십시오. 헤더는 #include를 통해 포함되므로 여기에 나열하지 않습니다.
gcc main.c math_utils.c -o app분리 컴파일
규모가 큰 프로젝트에서는 -c를 사용하여 각 파일을 목적 파일로 컴파일하십시오. 그러면 .o 파일이 생성되지만 연결은 수행되지 않습니다.
분리하여 컴파일하면 소스 하나를 변경했을 때 해당 파일만 다시 컴파일하면 되므로 대규모 빌드가 빨라집니다.
gcc -c main.c /* produces main.o */
gcc -c math_utils.c /* produces math_utils.o */연결 단계
목적 파일이 준비되면 이를 실행 파일로 연결합니다. 이때 gcc가 링커 역할을 하여 목적 파일을 결합하고 파일 간 심볼을 해결합니다.
이번에는 최종 프로그램이 필요하므로 다른 목적 파일을 만들 때 사용하는 -c를 쓰지 않습니다.
gcc main.o math_utils.o -o app링커의 역할
링커는 심볼을 사용하는 각각의 위치를 해당 심볼의 정의와 연결합니다.
main.o가 add를 호출하면 링커는 math_utils.o에 정의된 add를 찾아 둘을 연결합니다. 또한 프로그램에 필요한 표준 라이브러리 코드도 가져옵니다.
정의되지 않은 참조 오류
연결할 때 목적 파일 하나를 빠뜨리면 링커가 정의를 찾지 못해 정의되지 않은 참조를 보고합니다.
이는 컴파일 오류가 아니라 연결 시점 오류입니다. 각 파일은 정상적으로 컴파일되었지만, 최종 명령에 필요한 정의가 빠진 것입니다.
gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */유용한 경고 플래그
항상 경고를 활성화하여 컴파일하십시오. -Wall과 -Wextra를 사용하면 문제가 될 가능성이 있는 부분을 조기에 발견할 수 있습니다.
-std=c11을 추가하면 언어 표준이 선택되어 컴파일러가 달라도 동작을 예측할 수 있습니다. 이 플래그들은 한 단계로 컴파일할 때나 분리하여 컴파일할 때 모두 사용할 수 있습니다.
gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o app포함 경로
헤더가 다른 디렉터리에 있다면 -I를 사용하여 컴파일러에 검색 위치를 알려 주십시오.
예를 들어 -Iinclude는 include/ 폴더를 검색 경로에 추가하므로 다른 폴더에 있더라도 #include "math_utils.h"를 찾을 수 있습니다.
gcc -Iinclude -c src/main.c -o build/main.o재컴파일이 중요한 이유
분리 컴파일은 파일 하나만 변경되었을 때 특히 유용합니다. 해당 파일의 목적 파일만 다시 컴파일한 다음 다시 연결하면 됩니다.
하지만 헤더를 수정하면 헤더를 포함하는 모든 소스를 다시 컴파일해야 합니다. 헤더의 텍스트가 각 소스의 일부가 되기 때문입니다.
/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o appmake로 자동화하기
명령을 손으로 입력하는 일은 번거로워집니다. Makefile은 규칙을 기록하고 변경된 부분만 다시 빌드합니다.
이 최소 예제는 두 목적 파일을 app으로 연결합니다. make는 파일의 수정 시각을 추적하여 무엇을 다시 컴파일할지 결정합니다.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.c전체 빌드 복습
다음은 경고를 활성화한 상태에서 목적 파일부터 완성된 프로그램까지 진행하는 소규모 프로젝트의 전체 흐름입니다.
각 소스를 컴파일한 다음 목적 파일을 연결하십시오. 결과를 실행하여 처음부터 끝까지 제대로 작동하는지 확인하십시오.
gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./app빠른 확인
여러 파일로 구성된 빌드 과정에 대한 이해도를 확인해 보십시오.
복습
각 .c 파일을 -c로 목적 파일로 컴파일한 다음, 목적 파일을 연결하여 프로그램으로 만드는 방법을 배웠습니다. 경고에는 -Wall을, 포함 경로에는 -I를 사용하십시오.
정의되지 않은 참조는 연결 시점에 목적 파일이 누락되었다는 뜻입니다. make와 같은 도구를 사용하면 변경된 부분만 다시 빌드하는 작업을 자동화할 수 있습니다.
자주 묻는 질문
“여러 파일 컴파일하기” 강의는 무료인가요?
네 — “여러 파일 컴파일하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“여러 파일 컴파일하기”에서 뭘 배우나요?
여러 파일로 프로그램을 빌드해 보세요. 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“여러 파일 컴파일하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 헤더와 소스 파일
- 포함 방지 장치
- extern과 연결
- 여러 파일 컴파일하기