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

[리눅스/Linux] 컴파일을 위한 Makefile 간단 예제 - 여러개의 파일

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

 

지난 포스팅에서 아주 간단한 Makefile 예제를 소개했습니다. 간단 예제의 Makefile 을 조금씩만 손 보면 원하는 형태의 프로그램을 간편하게 컴파일할 수 있습니다. 한 번만 만들어놓으면 코드 수정 후 make 명령만 실행하면 알아서 컴파일 하고 실행 파일까지 만들어주니 리눅스 환경에서는 거의 필수로 생각해도 됩니다.

 

Makefile 관련 포스팅

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

 

 

여러 개의 파일을 컴파일하는 Makefile 예제

이번에는 여러 개의 파일을 컴파일하는 Makefile 을 소개하도록 하겠습니다. 

우선 컴파일을 수행할 프로그램 코드를 만들어줍니다. 지난 시간에 만들었던 test.c 를 그대로 이용하고 약간 확장해서 korea.c, world.c, usa.c 를 추가로 만들었습니다. 

 

main 함수 - test.c

method 구현 - korea.c, world.c, usa.c

헤더파일 - hello.h

실행파일 - hello

 

hello 컴파일 구조

 

test.c

#include "hello.h"

void main (void)
{
  kr_print ();
  usa_print ();
  world_print ();
  return;
}

 

korea.c

#include "hello.h"

void kr_print ()
{
  printf ("Hello Korea!\n");
}

 

usa.c

#include "hello.h"

void usa_print ()
{
  printf ("Hello USA!\n");
}

 

world.c

#include "hello.h"

void world_print ()
{
  printf ("Hello World!\n");
}

 

hello.h

#include <stdio.h>

void kr_print ();
void world_print ();
void usa_print ();

 

Makefile

지난 Simple Makefile 에서 별로 바뀐부분이 없습니다. 컴파일해야할 source 파일이 많아지면 파란색으로 표시된 SRCS에 컴파일이 필요한 source 파일을 쭉 나열하면 끝입니다. 헤더 파일은 초록색으로 표시된 L_INCFLAGS 뒤에 -I  옵션과함께 헤더 파일이 위치한 디렉토리를 나열해주면 됩니다. 이 번 예제는 헤더 파일이 같은 디렉토리에 있어서 -I./ 추가했습니다. 

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

TARGET= hello
SRCS= test.c korea.c world.c usa.c
OBJS= $(SRCS:.c=.o)
CC=gcc

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

CPPFLAGS+= $(L_CPPFLAGS) $(L_INCFLAGS)
CFLAGS+= $(L_CFLAGS) -D_REENTRANT
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)

 

Makefile 실행 예제

Makefile 실행

728x90
반응형

댓글