본문 바로가기
프로그래밍/리눅스

[리눅스] 컴파일을 위한 Makefile - 간단 예제 simple example

by 앗싸붕 2020. 12. 2.
728x90
반응형

 

linux 에서 C언어 컴파일

 

Hello World 란 문자를 출력하는 test.c 파일을 생성합니다. 

 

test.c

#include <stdio.h>

void main (void)
{
    printf ("hello world!\n");
    return;
}

 

test.c

 

이 파일을 실행하기 위해서는 우선 파일을 컴파일하고 결과로 나온 오브젝트 파일을 묶어서 실행파일을 만들어야 합니니다. gcc 명령을 이용해서 한다면 다음과 같습니다.

cc 명령을 이용한 컴파일 및 링킹 과정

 

간단한 Makefile 예제

위에 예제로 사용한 test.c 파일을 컴파일하는 Makefile 입니다.

ㅠㅠ 복잡해보입니다. 간단한 test.c 파일 하나 컴파일하는데 Makefile 양이 더 많네요..ㅎㅎ 하지만 프로그램을 만들다보면 소스파일도 많아지고, 라이브러리도 가져다쓰고 하게되는데 이럴 때는 Makefile 이 정말 유용합니다.

 

우선 지금은 초록색으로 표시된 부분만 보시면 됩니다. "TARGET" 에 원하는 실행파일 이름, "SRCS" 에는 소스파일 이름을 나열하면 됩니다. 소스파일은 test.c 하나이고, 실행파일 이름은 원하는 이름을 넣으면 됩니다. 전 mk_test 로 설정했습니다.

#
#-----------------------------------------------------------------------------
#
# JUNGFO's simple Makefile
# Copyright (c) since 2020 jungfo@naver.com Technology.
# All rights reserved.

#
#-----------------------------------------------------------------------------
#
# Makefile
#

TARGET= mk_test
SRCS= test.c 
OBJS= $(SRCS:.c=.o)

L_CPPFLAGS=
L_INCFLAGS= -I./
L_CFLAGS= 
L_LDFLAGS=
L_LDLIBS= 

CPPFLAGS+= $(L_CPPFLAGS) $(L_INCFLAGS)
CFLAGS+= $(L_CFLAGS) 
LDFLAGS+= $(L_LDFLAGS) $(L_LDLIBS)

.PHONY: all
all: build

.PHONY: build
build: $(TARGET)

$(TARGET): $(OBJS)
        $(CC) -o $@ $^ $(LDFLAGS)

.PHONY: clean
clean:
        rm -f $(TARGET) $(OBJS) $(DEPEND_FILE) core* 

.PHONY: distclean
distclean: clean


.PHONY: depend
depend: $(SRCS)
        $(CC) -M $(CFLAGS) $(CPPFLAGS) $^ > $(DEPEND_FILE)

-include $(DEPEND_FILE)

Simple example for Makefile

이제 source 파일과 Makefile 이 준비되었으니 실행만 시켜주면 되겠네요. 

Makefile 실행 명령 옵션은 Makefile 내에 all, build, clean, distclean, depend 를 만들어 놓았습니다. 우선은 make all 과 make clean 만 사용하도록 하겠습니다.

make all      - 컴파일하고 실행파일 생성. (make 만 실행하면 기본적으로 make all 이 수행됨.)
make clean  - 실행파일 및 컴파일 중 생성된 파일 삭제.

 

make 를 수행하고 나온 실행파일을 실행해봅니다.

 

make all

728x90
반응형

댓글