Makefile의 이해 ㈜FALinux http://www.falinux.com 박진호.

Slides:



Advertisements
Similar presentations
어르신 생활 지혜 ( 사 ) 과 우 회 과우봉사단 ( 사 ) 과 우 회 과우봉사단 1 녹색성장을 위한 생활과학.
Advertisements

10장. 시기별 학급경영 11조 염지수 이 슬 권용민 신해식.
일본 근세사. (1) 에도막부의 개창 ( ㄱ ) 세키가하라의 전투 (1600) - 히데요시의 사후 다섯 명의 다이로 ( 大老 ) 가운데 최대 영지 (250 만석 ) 를 보유하고 있던 도쿠가와 이에야스가 급부상. 이에 이에야스와 반목해 온 이시다 미쓰나리 ( 石田三成 ),
아니마 / 아니무스 송문주 조아라. 아니마 아니마란 ? 남성의 마음속에 있는 여성적 심리 경향이 인격화 한 것. 막연한 느낌이나 기분, 예견적인 육감, 비합리적인 것에 대 한 감수성, 개인적인 사랑의 능력, 자연에 대한 감정, 그리.
대구가톨릭대학교 체육교육과 06 학번 영안중학교 체육교사 신웅섭 반갑습니다. 반야월초등학교 축구부 대륜중학교 축구부 대륜고등학교 대구가톨릭대학교 차석 입학 대구가톨릭대학교 수석 졸업 2014 년 경북중등임용 체육 차석 합격 영안중학교 체육교사 근무 소개.
서울지하철노조 설립. 1. 전형적 공기업 군사 문화 가 일 개통 1 호선 서울시 공무원으로 운영 일 3.4 호선 건설한 공사와 합병 공무원신분에서 신분변경 나. 공사 내부의 군사 조직과 군사문화 - 공사 사장 감사 이사 ( 별.
우리테크 녹색경영을 달성하기 위한 녹색경영 방침 □ 우리테크는 파워 드레인트탭을 제조, 판매하는 회사로써 오랜경험과 축적된 노하우를 통해 독 자적인제품 개발에 주력하고 있다. □ 또한 우리테크는 안정적이고 친환경적인 제품 생산을 위해 항상 연구와.
일장 - 1 일 24 시간 중의 명기 ( 낮 ) 의 길이 ( 밤은 암기, 낮은 명기 ) 광주기성 - 하루 중 낮의 길이의 장단에 따라 식물의 꽃눈 형성이 달라지는 현상 일장이 식물의 개화현상을 조절하는 중요한 요인 단일식물 - 단일조건에서 개화가 촉진되는 식물 장일식물.
지원직무주민등록번호 - 사진 * 사진 등록을 원하시지 않는 경우 등록하지 않으셔도 됩니다. 성명 ( 한글 ) 연락처 010) -, 02) - ( 영문 국적 ( 영주권 ) ■ 한국 □ 외국 ( 국적명 : ) ( 해외국적 취득일 : 년 월 ) 현주소 학력사항.
2 학년 6 반 1 조 고은수 구성현 권오제 김강서.  해당 언어에 본디부터 있던 말이나 그것에 기초하여 새로 만들어진 말  어떤 고장 고유의 독특한 말  Ex) 아버지, 어머니, 하늘, 땅.
2014년도 교원 및 기간제교사 성과상여금 전달교육 개 회 국기에 대한 경례 - 인사말
선진 고양교육 “유아교육 행정 업무 연수” 유치원 회계실무 및 유아학비 연수 경기도고양교육청.
변비 재활전문센터 재활 간호사 김은화.
묵자 겸애, 비명, 비공, 상현, 상동, 천지, 명귀, 삼표 법.
(금) 김 희 준 Makefile (금) 김 희 준
제3장 C 프로그래밍 환경.
내 아이를 위한 구강관리.
05. gcc, make, gdb.
Q & A (사실상 혼인·이혼) Q. 사실상 혼인·이혼 관계를 어떻게 처리해야 하나요?   사실 혼인·이혼은 부부 모두 동의 여부를 확인하고, 자녀, 이·통·반장으로부터 「사실(이)혼 확인서」를 징구해야 합니다. 만약 어느 한쪽이 동의하지 않는 경우는.
제16장 원무통계 • 분석 ☞ 통계란 특정의 사실을 일정한 기준에 의하여 숫자로 표시한 것을 말한다.통계로서 활용할 수 있는 조건으로는 ① 동질성을 지녀야 하고 ② 기준이 명확하고 ③ 계속성이 지속되어야 하며 ④ 숫자로 표시하여야 한다 경영실적의.
리눅스 실습 정성훈.
서울지방세무사회 부가세 교육 사진클릭-자료 다운 세무사 김재우.
전산회계1급 기출 50회 신성대학교 세무부동산과 김상진.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
치매의 예방 김 은민 윤금 노인요양원 치매의.
개발 환경 개발 환경 개요 PXA270과 타겟 시스템 툴체인 환경 구축 JTAG 유틸리티 미니컴 Make 유틸리티
Kernel Porting Lecture #7.
임베디드 프로그래밍 Lecture #
제9장 C 프로그래밍 환경 창병모
작 성 자: 김선영 메 일: sunyzero (at) gmail (dot) com 버 전: 1.30
MicroC/OS-II Lab. 경희대학교 컴퓨터공학과 조 진 성.
Autotools Autoconf, automake Further Study
Embedded System Porting (2)
독도 바로알기 2. 사료와 지도로 보는 독도.
작 성 자: 김선영 메 일: sunyzero (at) gmail (dot) com 버 전: 1.30
Internet Protocol and Programming
Geek-OS Project 정영진
커널 모듈 프로그래밍 (Kernel Module Programming)
HBE-SMIII-SV210 리눅스 커널과 디바이스 드라이버
Operating System 3주차 - About Linux -
Linux/UNIX Programming
마산에 대하여 만든이 : 2204 김신우, 2202 권성헌.
제 11 장 전처리기.
Ss-1 Energy Networks (주) 에스이엔 S-energy Networks CO.,LTD.
Makefile의 이해 ㈜FALinux 박진호.
Kernel Programming Environment
노인 자원봉사 학 과 명 : 사회복지과 교 과 명 : 자원봉사론 담당 교수 : 한경리교수님
Internet Protocol and Programming
작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.
Lecture Notes on Computer Networks 주 홍 택 컴퓨터공학과 계명대학교
GoAhead Web Server.
마음의 성전이 더 아름다운 조촌교회.
지구 온난화 원재환.
승강기 구조 및 원리.
6장 마케팅 조사 박소현, 김중호, 박기찬.
1.비 사업용(자가용 및 관용) 차 종 적 용 상 의 구 분 승합 자동차 (버스) 1 종
한밭대학교 창업경영대학원 회계정보학과 장 광 식
Implementation.
음양오행과 물리학 조 원 : 김용훈, 양범길, 박수진, 윤진희, 이경남, 박미옥, 박지선 (11조)
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
Internet Protocol and Programming
이야기 치료에 대하여 <8조 학문적 글쓰기 발표> 주희록 최은지
(4)잎의 구조와 기능 학습목표 잎의 구조와 기능을 설명할수 있다. 기공의 구조와 증산의 조절 작용을 설명할 수 있다.
시민이 체감하는 편리한 건축인허가 절차 개선 추진.
Makefile
vi editor 2 번째주 Dept. of Computer Science & Engineering
교 육 순 서 화재예방과 진화요령 긴급상황 시 대처요령 소방시설 사용 화재진화 및 피난 기타 당부 및 질문.
중국문학개론 한부와 겅건안문학 중어중국학과 ㅇ이진원 한부와 건안문학.
■ 한국 □ 외국 (국적명: ) (해외국적 취득일 : 년 월)
C프로그래밍 도구 컴퓨터공학과 강성인.
Presentation transcript:

Makefile의 이해 ㈜FALinux http://www.falinux.com 박진호

목차 make 의 개요 Makefile의 내부구조 make 구문의 기본 규칙 의존관계 프로젝트 관리 Makefile 예제 매크로 확장자 규칙 include 의존관계 프로젝트 관리 Makefile 예제 Makefile 작성 가이드 라인 2007-05-13

make에 대한 개요(1) make는 명령을 생성하는 유틸리티 이다. make는 기술파일(Makefile 또는 makefile)을 이용하여, 쉘명령을 자동으로 수행하게 한다. 소프트웨어 개발 시 반복적 작업을 쉽고, 간단하게 수행 할 수 있게 한다. 2007-05-13

make에 대한 개요(2) make는 재작성 시간을 최소화 하여, 작업 시간을 줄여 준다. 2007-05-13

Makefile의 내부 구조(1) 콜론(:) 을 포함하는 행 탭(Tab) 문자로 시작하는 하나이상의 명령 행 콜론 왼쪽은 타겟 콜론 오른쪽은 타겟에 필요한 Dependency 탭(Tab) 문자로 시작하는 하나이상의 명령 행 실제 수행하는 명령을 쓴다. 2007-05-13

Makefile의 내부 구조(2) Makefile의 기본적인 형태 Target Dependency Command 명령이 수행되어 나온 결과를 파일을 지정. Dependency Target이 어떤파일에 종속적인가를 지정. Command 실제 실행될 명령어 및 쉘 스크립트 사용가능. Target: Dependency [TAB] Command 2007-05-13

Makefile의 내부 구조(3) 레이블의 사용 Lable Command Target 대신에 사용 가능. ex) all: ex) clean: Command 실제 실행될 명령어 및 쉘 스크립트 사용가능. Lable: [TAB] Command 2007-05-13

make 구문의 기본 규칙 빈 라인은 무시 한다. 라인에 ‘#’이 나오면 그이후로 끝까지 무시 하나의 라인이 길어 질 경우 '\'를 추가하여 라인을 바꿀 수 있다. 라인 사이가 '\' 로 연결된 것은 make에서 하나의 라인으로 인식한다. 2007-05-13

매크로(1) 매크로 작성은 등호를 이용 작성된 매크로를 참조 하기 위해서는 매크로 이름 앞에 ‘$’를 붙여 사용 기존에 작성된 매크로에 내용을 추가 하기 위해서는 += 과 같은 방식을 사용 INCLUDE = -I/usr/include INCLUDE += -I/usr/locla/include 실제 INCLUDE가 를 참조하여 사용될때는 -I/usr/include -I/usr/locla/include 와 같이 된다. 2007-05-13

매크로(2) ‘=‘ 표시 이후에 아무런 문자열이 없는 매크로 정의에는 NULL 문자열이 할당된다. 매크로 정의 순서는 상관 없다. 같은 이름으로 매크로를 정의하면 맨 마지막에 정의한 매크로만을 참조 한다. 2007-05-13

매크로(3) 미리 정의 해놓은 매크로 및 환경변수 make 는 수많은 일반 명령들을 매크로로 미리 정의해 놓고 있다. $(CC) 매크로는 항상 C 컴파일러로 인식. $(LD) 매크로는 항상 링커로 인식. make –p 를 이용하여 내부적으로 정의된 매크로가 어떤것이 있는지 출력해서 살펴 볼 수 있다. 2007-05-13

매크로(4) 명령행에서의 매크로 make 명령 행에서 매크로를 정의 할 수 있다. 명령행에서 정의가 여러 단어들로 구성 되어 있을 경우 해당 부분을 작은 따옴표(‘’)나 큰 따옴표(“”)로 묶어 주어야 한다. 매크로를 make 명령 이전에 정의 할 수도 있다. $ make test DIR=/usr/project $ make test DIR=“/usr/project /usr/project/lib” $ DIR=/usr/project make test 2007-05-13

매크로(5) 매크로 할당 우선순위 1. 명령 행에서 정의한 매크로 2. Makefile에 정의된 매크로 3. 현재 쉘의 환경변수 4. make 내부에 정의된 매크로 2007-05-13

매크로(6) 내부 매크로 임의로 설정 해서 사용할 없는 매크로 $* $< main.o : io.h main.c 현재 타겟보다 최근에 변경된 현재 필요 항목의 이름(확장자 제외) $< 현재 타겟보다 최근에 변경된 현재 필요 항목의의 이름(소스파일) main.o : io.h main.c [TAB] gcc –c $*.c main.o : io.h main.c [TAB] gcc –c $< 2007-05-13

매크로(6) $@ $^ test : main.o foo.o bar.o [TAB] gcc –o $@ $*.c 현재 타겟의 이름 $^ 현재 타겟보다 최근에 변경된 필요 항목들의 리스트 test : main.o foo.o bar.o [TAB] gcc –o $@ $*.c test : main.o foo.o bar.o [TAB] gcc –o $@ $^ 2007-05-13

확장자 규칙(1) make가 파일의 확장자를 보고, 그에 따라 적절한 연산을 수행시키는 규칙 어떤 확장자에 대한 규칙이 정의되어 있더라도, .SUFFIXES 리스트에도 함께 정의 되어야 효력이 있다. 2007-05-13

확장자 규칙(2) .SUFFIXES와 우선순위 오브젝트 파일이 존재하지 않으면, make는 이를 작성하기 위한 .c, .s 소스 파일을 찿는다. make는 .SUFFIXES 리스트의 확장자 순서에따라 파일을 검색 한다. 내부에 미리 정의되어 있는 확장자 리스트 .SUFFIXES: .out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch .web .sh .elc .el 2007-05-13

확장자 규칙(3) 확장자 규칙에 의하여 make는 화일들간의 확장자를 자동으로 인식해서 필요한 작업을 수행한다. 확장자가 .c 인 파일은 C 소스코드 파일 확장자가 .o 인 파일은 오브젝트 파일 확장자가 .c 파일은 컴파일 되어 확장자가 .o 파일이 됨 .c.o: [TAB] $(CC) –c $< -o $@ 2007-05-13

include include include는 만드시 줄의 처음에서 시작해야 하면 다음에 공백 문자 혹은 탭문자가 나와야 한다. include 앞에 공백이나 탭이 있어서는 안된다. include의 효과는 'file_name'의 모든 행을 현재의 Makefile로 옮겨 적는 것과 동일함. 사용법 include file_name 2007-05-13

의존 관계(1) 헤더파일 의존성 관계 make는 소스에 숨겨져 있는 의존관계를 살펴보기 위해 파일의 내부를 들여다 볼 수 없다. #include 지시자가 소스 파일에 있는지 알 수 있는 방법이 없으므로, 헤더파일이 변경되었을 경우, 다시 오브젝트 파일을 생성할 방법이 없다. 이러한 한계를 극복하기 위하여 대부분 Makefile에서는 의존 관계를 직접 지정한다. 2007-05-13

의존 관계(2) 헤더파일 의존성 관계 생성 GNU 컴파일러(gcc)에서 제공하고 있는 -M 옵션을 이용하게 되면, 의존파일의 리스트를 만들어 낼 수 있게 된다. 의존관계를 만들고 include문을 통하여 .depend파일을 Makefile에 인클루드 시킨다. gcc를 사용할 경우, gccmakedep 명령을 이용하면 의존관계를 쉽게 만들어 낼 수 있다. gcc -M $(SRCS) > .depend include .depend 2007-05-13

프로젝트 관리(1) 재귀적 사용 대부분의 프로젝트에서는 소스 파일을 계층 구조의 디렉토리로 만들어서 make에서 사용할 수 있도록 한다. 각 하위 디렉토리에 별도의 기술 파일을 두고 마스터 기술 파일에서 이들 make를 재귀적으로 실행하여 연결 한다. make –C <DIR> 2007-05-13

프로젝트 관리(2) 컴파일러 옵션과 #ifdef 지시자 기술 파일 이름 #ifdef나 #ifndef와 같은 전처리 지시자를 사용하는 조건부 컴파일은 소프트웨어 발전과 함께 불가피한 선택이 되고 있다. 기술 파일 이름 -f 옵션을 사용하여 기본 이름과 다른 이름의 기술 파일을 지정 할 수 있다. [Makeflie의 내용] CFLAGS = -DTEST [Source Code의 내용] #ifdef TEST test_print(); #endif make –f ./test.mk 2007-05-13

Makefile 예제(1) 예제의 구조 io.h foo.c bar.c foo.o bar.o main.c test main.o 2007-05-13

Makefile 예제(2) ♣ 아무런 기능을 사용하지 않았을 경우 all: test test : main.o foo.o bar.o gcc –o test main.o foo.o bar.o main.o : io.h main.c gcc –c main.c foo.o : io.h foo.c gcc –c foo.c bar.o : io.h bar.c gcc –c bar.c 2007-05-13

Makefile 예제(3) ♣ 매크로를 사용하였을 경우 OBJS = main.o foo.o bar.o SRCS = main.c foo.c bar.c CC = gcc CFLAGS = -g -c TARGET = test all: $(TARGET) $(TARGET) : $(OBJS) $(CC) -o $(TARGET) $(OBJS) clean : rm -rf $(OBJS) $(TARGET) core main.o : io.h main.c foo.o : io.h foo.c bar.o : io.h bar.c 2007-05-13

Makefile 예제(4) ♣ 매크로와 확장자 규칙을 사용했을 경우 CC = gcc CFLAGS = -O2 -g OBJS = main.o foo.o bar.o SRCS = $(OBJS:.o=.c) TARGET = test all: $(TARGET) $(TARGET) : $(OBJS) $(CC) -o $@ $(OBJS) dep: gccmakedep $(SRCS) clean : rm -rf $(OBJS) $(TARGET) core 2007-05-13

Makefile 작성 가이드 라인(1) 살펴본 3개의 Makefile은 모두 같은 일을 하는 Makefile의 예제이다. 2007-05-13

Makefile 작성 가이드 라인(2) 최대한 매크로를 많이 사용한다. 확장자 규칙은 무조건 이용 매크로 정의 부분 타켓을 얻기 위한 명령어 부분 의존 관계 부분 2007-05-13