개요
리눅스 기본 컴파일러 명령어인 cc를 활용하여 C 프로그램을 작성하고 실행 파일로 빌드하는 전 과정을 다룹니다. 개발 도구 설치부터 단일 파일 빌드, 필수 컴파일 옵션(-o, -Wall), 분할 컴파일 기법까지 초보자 눈높이에 맞춰 체계적으로 실습합니다.
C 컴파일러 환경 구축 및 cc 명령어 확인
우분투 환경에서 C 언어 소스 코드 컴파일에 필요한 개발 도구를 설치하기 위해 sudo apt-get update -qq && sudo apt-get install -y build-essential 명령어를 실행합니다.

시스템에 등록된 기본 C 컴파일러의 실행 파일 경로를 확인하기 위해 which cc 명령어를 실행합니다.

cc 명령어는 C 언어 소스 코드를 컴파일하여 실행 파일을 생성합니다.
설치된 컴파일러의 세부 버전 정보를 확인하기 위해 cc --version 명령어를 실행합니다.
⚙️ [주요 옵션]
-o : 생성할 실행 파일의 이름을 지정합니다.-c : 링킹 과정을 건너뛰고 소스 파일을 오브젝트 파일(.o)로 컴파일합니다.-Wall : 컴파일 과정에서 감지되는 모든 주요 경고 메시지를 활성화합니다.-g : 디버거를 통한 문제 분석에 필요한 디버깅 심볼을 실행 파일에 포함합니다.-O2 : 실행 성능 향상을 위해 코드를 최적화하여 빌드합니다.

기본 C 소스 작성과 기본 컴파일 실습
C 언어 컴파일 실습을 진행할 전용 디렉터리를 생성하고 이동하기 위해 mkdir -p ~/c_practice && cd ~/c_practice 명령어를 실행합니다.

컴파일 실습에 사용할 기본 C 언어 소스 코드 파일(hello.c)을 작성하기 위해 cat 명령어를 실행합니다.

작성한 hello.c 소스 코드를 기본 옵션으로 컴파일하기 위해 cc hello.c 명령어를 실행합니다.
별도의 출력 옵션을 지정하지 않으면 현재 디렉터리에 a.out이라는 기본 실행 파일이 생성됩니다.

컴파일 결과로 생성된 기본 실행 파일이 정상적으로 동작하는지 확인하기 위해 ./a.out 명령어를 실행합니다.
실행 결과로 소스 코드에 작성된 “Hello, Linux cc!” 문자열이 화면에 출력됩니다.

출력 파일명 지정(-o) 및 안전한 빌드 옵션(-Wall, -O2)
빌드 옵션 실습에 사용할 C 언어 소스 코드 파일(calc.c)을 작성하기 위해 cat 명령어를 실행합니다.

모든 주요 경고 메시지를 표시하는 -Wall 옵션과 코드 최적화를 수행하는 -O2 옵션을 적용하고, 생성할 실행 파일 이름을 calc_app으로 지정하여 컴파일하기 위해 cc -Wall -O2 -o calc_app calc.c 명령어를 실행합니다.
오류나 경고 메시지 없이 컴파일이 완료되면 지정한 이름의 실행 파일이 생성됩니다.

컴파일 결과로 지정한 실행 파일(calc_app)이 올바르게 생성되었는지 상세 정보를 확인하기 위해 ls -l calc_app 명령어를 실행합니다.
출력 결과를 통해 파일의 크기와 실행 권한(x)이 정상적으로 부여되었음을 확인할 수 있습니다.

생성된 calc_app 실행 파일이 의도대로 동작하는지 확인하기 위해 ./calc_app 명령어를 실행합니다.
실행 결과로 소스 코드의 덧셈 연산 결과인 “Result: 40” 문자열이 화면에 출력됩니다.

오브젝트 파일 분할 컴파일(-c)과 링크 실습
분할 컴파일 실습에 필요한 함수 선언 헤더 파일(message.h)을 작성하기 위해 cat 명령어를 실행합니다.

선언된 함수의 세부 동작을 구현하는 소스 코드 파일(message.c)을 작성하기 위해 cat 명령어를 실행합니다.

헤더 파일을 참조하여 프로그램을 시작하는 메인 소스 코드 파일(main.c)을 작성하기 위해 cat 명령어를 실행합니다.

각 C 언어 소스 코드(message.c, main.c)를 링크 과정을 거치지 않고 개별 오브젝트 파일로 컴파일하기 위해 cc -c message.c main.c 명령어를 실행합니다.-c 옵션을 적용하면 링킹 단계를 건너뛰고 소스 파일마다 각각의 목적 파일(.o)이 생성됩니다.

컴파일 결과로 생성된 오브젝트 파일들의 상세 정보를 확인하기 위해 ls -l *.o 명령어를 실행합니다.
출력 결과를 통해 message.o와 main.o 파일이 현재 디렉터리에 정상적으로 생성되었음을 확인할 수 있습니다.

독립 컴파일된 오브젝트 파일들(message.o, main.o)을 하나로 링크하여 실행 파일(modular_app)을 생성하기 위해 cc -o modular_app message.o main.o 명령어를 실행합니다.
오브젝트 파일 간의 함수 참조 관계가 결합되어 최종 실행 바이너리가 완성됩니다.

분할 컴파일과 링크를 거쳐 완성된 실행 파일이 정상 동작하는지 확인하기 위해 ./modular_app 명령어를 실행합니다.
실행 결과로 모듈 함수가 호출되어 “Modular Build Complete!” 문자열이 화면에 출력됩니다.

지금까지 우분투 환경에서 cc 명령어를 활용한 C 언어 컴파일 실습부터 핵심 빌드 옵션까지 간단하게 정리해보았습니다.
알려드린 옵션들을 바탕으로 리눅스 환경에서 더욱 효율적이고 안정적인 C 언어 개발을 시작해 보세요.