2007. 3. 16 (금) 김 희 준 icemichy@hufs.ac.kr Makefile 2007. 3. 16 (금) 김 희 준 icemichy@hufs.ac.kr.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
엑셀리포트를 이용한 날짜별 리포트 자동 저장 방법
컴퓨터와 인터넷.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
05. gcc, make, gdb.
Cross Compiler를이용한 커널 컴파일 및 포팅
Cross Compiler를이용한 커널 컴파일 및 포팅 1
MYSQL 설치.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
Makefile의 이해 ㈜FALinux 박진호.
컴퓨터 프로그래밍 기초 [Final] 기말고사
리눅스 기본 명령어 및 Vi 명령어 정리 2015/1, 컴퓨터의 개념 및 실습.
Power Java 제2장 자바 개발 도구.
C 언어 1 1주차 C언어 시작하기 - 1차시 C 언어 특징 및 프로젝트 생성 Programming Language.
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
QT 프로그래밍 발표: 김래영.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Root Filesystem Porting
C / C++ Programming in multi platform
Visual Basic .NET 처음 사용하기.
26. 매크로와 전처리기.
Root Filesystem Porting
Linux Master 김희승 임승한 OneScore 임승한.
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
ARM Development Suite v1.2
Cross Compiler 설치.
Operating System 3주차 - About Linux -
Cross Compiler를이용한 커널 컴파일 및 포팅
AVR – ATmega103(ATMEL) Compilers & ISP
rc script, 특정 port로 telnet
[INA470] Java Programming Youn-Hee Han
Method & library.
27장. 모듈화 프로그래밍.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Device Driver 임베디드 시스템 I.
Makefile의 이해 ㈜FALinux 박진호.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
1. 스크립트 작성 마법사 2. NSIS 스크립트 컴파일
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
빌드 성공.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
( Windows Service Application Debugging )
제 6 강 Getting started.
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
함수, 모듈.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Homework #7 (1/3) 1. 다음 순서에 따라 수행하고, 그 과정의 화면을 캡쳐한다.
CODE INJECTION 시스템B 김한슬.
Docker Study 6~7.
1장. C Language Synopsis.
6 객체.
C프로그래밍 도구 컴퓨터공학과 강성인.
Presentation transcript:

2007. 3. 16 (금) 김 희 준 icemichy@hufs.ac.kr Makefile 2007. 3. 16 (금) 김 희 준 icemichy@hufs.ac.kr

Contents gcc compile Makefile

gcc –compiler(definition) Compile과정은 인간이 이해하는 언어를 CPU가 이해하는 인스트럭션으로 변환하는 과정 #objdump –S 실행파일

Compiler 작동과정 /usr/bin/gcc 의 내부에서 모든 과정이 일어난다.

Compiler 작동과정(Con’t) 실제 컴파일과정 Script --save-temps option 전처리 과정 컴파일 과정 어셈블 과정 링크 과정

gcc - option version 확인 Compile option -c : object file 생성 ex) gcc –c hello.c -o : 실행코드의 output filename을 지정 ex) gcc –o test test.c (default : a.out) -O[level] : Object code를 최적화. level은 0부터 3(default : -O2) -g : 실행코드에 디버깅 코드 추가 ex) gdb 같은 디버거를 사용 -I : gcc가 헤더 파일을 찾는 헤더 경로 -l : 표준 라이브러리 이외의 라이브러리 링크시 사용 ex) –lm(수학 라이브러리), -lstuff(사용자가 만든 라이브러리)

gcc - library library Static library (*.a) : ar를 사용하여 만든 archive 파일 static library는 compile 할 때 linker는 프로그램이 필요로 하는 부분을 library에서 찾아서 실행파일에 복사 ar r libstuff.a factorial.o // ‘libstuff.a ‘ archive 생성 ex) UNP library의 libunp.a Shared library (*.so) shared library(dynamic library)는 static library와 달리 실행파일에 단순히 "실행될 때 우선 이 라이브러리를 로딩시킬 것"이라는 메세지만을 남겨두게됨 shared library를 사용하면 실행화일의 크기가 작아지고, 메모리와 하드 디스크의 용량도 적게 차지 Linux의 기본 동작은 일단 shared library가 있으면 그것과 link를 시키고, 그렇지 않으면 static library를 가지고 link ※ archive : ‘members’ 라고 불리는 서브 파일들을 담고 있는 파일. ‘ar’에 의해서 관리되고, archive file의 목적은 link를 위한 sub-routine library이다.

gcc – compile 시 유의사항 ‘unpv13e/intro/daytimetcpcli.c’의 compile compile 할 때 command가 너무 복잡  Makefile 사용 compile 주의사항 Solaris에서 socket library를 사용하는 program을 compile 할 때에는 ‘–lnsl’과 ‘–lsocket’ library를 link 해야함.

Makefile 프로그램 그룹을 유지하는데 필요한 유틸리티 프로그램 개발뿐만 아니라 컴파일러처럼 일종의 명령어 방식으로 처리되는 모든 곳에서 쓰임 makefile은 make가 이해할 수 있도록 한 일종의 쉘 스크립트 언어 (makefile database 라 불리기도 함) 결과 파일을 생성시키기 위한 파일들간의 관계, 명령어 등을 기술 각 파일에 대한 반복적 명령을 자동화시켜 개발자들의 수고를 덜고 시간 절약 효과

기본적인 구조 Basic Structure – Example1 test : main.o read.o write.o gcc –o test main.o read.o write.o main.o : io.h main.c read.o : io.h read.o write.o : io.h write.o 주의사항 : 반드시 “TAB”키를 이용할 것. TAB key 미 사용시 명령절을 타겟절로 해석함. “ 의존관계 목표절 TAB 명령절 목표(target) 부분 명령(command)이 수행이 되어서 나온 결과 파일을 지정한다. 당연히 목적 파일(object file)이나 실행 파일이 될 것이다. 명령(command) 부분 정의된 명령들은 의존 관계(dependency)부분에 정의된 파일의 내용이 바뀌었거나, 목표 부분에 해당하는 파일이 없을 때 이곳에 정의된 것들이 차례대로 실행이 된다.

기술파일 작성시 기본규칙 비어있는 행은 무시 ‘#’은 주석 ‘\’를 이용해 기술 내용이 긴 내용을 다음 행으로 표현 가능 Ex) diary : memo.o calendar.o \ main.o diary : memo.o calendar.o main.o 종속 항목이 없는 타겟도 가능 Ex) Clean : rm –rf *.0 target1 target2 같은 의미

‘\’를 이용한 기술 결과

Macro 사용 매크로는 프로그램 코딩 시와 같이 사용해서 값을 대입 그러나 사용할 때는 반드시 $(..) 안에 넣어서 사용 OBJECTS = client.obj server.obj array_i.obj test : $(OBJECTS) cl -o test $(OBJECTS) client.obj : array.h client.cxx cl -c client.cxx server.obj : array.h server.cxx cl -c server.cxx array_i.obj : array.h array_i.cxx cl -c array_i.cxx 아래는 client.obj server.obj array_i.obj 파일들을 OBJECTS 라는 매크로로 바꾸는 makefile 예제

Macro 작성시 기본규칙 ‘=‘을 포함하여 ‘#’은 주석 ‘\’를 이용해 기술 내용이 긴 내용을 다음 행으로 표현 가능 Ex) NAME = string ‘=‘ 좌측에는 Macro 이름, 우측에는 정의 문자열 ‘#’은 주석 ‘\’를 이용해 기술 내용이 긴 내용을 다음 행으로 표현 가능 Macro 참조시 소괄호나 중괄호를 둘러싸고 앞에 ‘$’ $(NAME) #string ${NAME}.c #stirng.c 중복된 정의는 최후에 사용할 것

Macro 사용시 주의사항 구분을 목적으로 “string”으로 지정 시 “ ”도 문자열로 인식 이름에 ‘:’, ‘=‘, ‘#’, TAB 사용 불가 치환될 위치보다 먼저 정의 되어야 함

미리 정의되어 있는 Macro Make –p 명령으로 내부에 정의된 매크로 리스트들이 나열 ASFLAGS = ‘as’ Option setting AS = as CFLAGS = ‘gcc’ Option setting CC = cc (= gcc ) CPPFLAGS = ‘g++’ Option setting CXX = g++ LDLFAGS = ‘ld’ Option setting LD = ld LFLAGS = ‘lex’ Option setting LEX = lex YFLAGS = ‘yacc’ Option setting YACC = yacc MAKE_COMMAND = make RM = rm -f

미리 정의되어 있는 Macro(cont’d)

내부 Macro List Ex) main.o : main.c io.h $? 현재의 타겟보다 최근에 변경된 종속 항목 리스트 (확장자 규칙에서 사용불가) $^ 현재 타겟의 종속 항목 리스트 $@ 현재 타겟의 이름 $< 현재 타겟보다 최근에 변경된 종속 항목 리스트 (확장자 규칙에서만 사용 가능) $* 현재 타겟보다 최근에 변경된 현재 종속 항목의 이름 $% 현재의 타겟이 라이브러리 모듈일 때 .o 파일에 대응되는 이름 Ex) main.o : main.c io.h gcc –c $*.c result : $* => main test : $(OBJS) gcc –o $@ $S.c result : $@ = test

내부 Macro List 기술 적용 결과

.o와 대응되는 .c를 발견하면 아래 명령을 수행한다. 확장자 규칙의 사용 파일의 확장자를 보고, 그에 따라 적절한 연산을 수행시키는 규칙. .cxx 파일은 일반적으로 C++ 소스 코드 .obj 파일은 목적 파일(Object file) .cxx 파일을 컴파일 -> .obj 파일 .SUFFIXES : .c .o %.o : %.c # OBJECTS = main.o calendar.o memo.o CC = gcc CFLAGS = –c all : diary Diary : $(OBJECTS) $(CC) -o $@ $^ .o와 대응되는 .c를 발견하면 아래 명령을 수행한다. $(CC) –c –o $@ $< SUFFIXES : make 파일에게 주의 깊게 처리할 파일들의 확장자를 등록

Macro Substitution $(MACRO_NAME : OLD = NEW) 을 사용 MY_NAME = Micheal Jackson YOUR_NAME = $(MY_NAME : Jack = Jook) >Result : Jookson OBJS = main.o read.o write.o SRCS = $(OBJS : .o = .c) >Result : SRCS = main.c read.c write.c 한 100개 정도의 파일을 일일이 지정 하지 않아도 되는 편리함이 있음.

재귀적 make 사용 여러 개의 파일과 디렉토리를 포함하는 프로젝트 compile시

Make 사용시 유용한 TIP -C dir : 우선 먼저 입력한 direction 으로 이동 후 다음 명령 실행 -d : 모든 process information 출력 -h : help -v : Makefile version 출력 -p : Makefile 내부 확장자 출력 -k : error가 발생해도 계속 진행

unplib directory를 include하여 compile UNP Lib를 사용하는 Makefile unplib directory를 include하여 compile 만들고자 하는 실행 프로그램파일 이름 필요한 object compile