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
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 실행 예제
728x90
반응형
'프로그래밍 > 리눅스' 카테고리의 다른 글
[ubuntu v14.04.1] MariaDB 설치 방법 (2) | 2020.12.23 |
---|---|
[swig 간단 예제] python 에서 C 라이브러리 함수 호출 (2) | 2020.12.04 |
[프로그래밍] ASCII table, 아스키 코드표 (4) | 2020.12.03 |
[리눅스] 컴파일을 위한 Makefile - 간단 예제 simple example (1) | 2020.12.02 |
[리눅스] linux 에서 listen하고 있는 port 확인하는 4가지 방법 (9) | 2020.11.30 |
댓글