06 LInux Editor

68
리눅스 편집기와 C 프로그래밍 1

Transcript of 06 LInux Editor

Page 1: 06 LInux Editor

리눅스 편집기와 C 프로그래밍

1

Linux 편집기

o  Emacs 편집기 n  Emacs 편집기 소개 n  Emacs 설치 n  Emacs 사용법

o  vi 편집기

o  gcc

2

Emacs 편집기 소개

o  Emacs 편집기란 n  Emacs 편집기

o  Richard Stallman에 의해 개발된 에디터 o  간단한 문서 편집으로부터 프로그래밍까지 다양하게 사용

n  특징 o  비 모드형 편집기

n  명령어를 수행하기 위해 ltCtrlgt 또는 ltAltgt 키와 다른 키의 조합을 이용

n  종류 o  GNU Emacs o  XEmacs

3

Emacs 설치

o  Emacs 설치 n  다운로드 httpwwwgnuorgsoftwareemacs n  APT 유틸리티 sudo apt-get install emacs

4

Emacs 사용화면

5

Emacs 기본

o  Emacs 명령어 n  CTRL(control) 또는 META(alt)키와 수식어로 이루어짐

n  Emacs 종료 o  C-x C-c

n  명령 멈추기 o  C-g

n  편집 되돌리기 (Undo) o  C-x u

명령어 내 용

C-s 저장

C-x C-w 다른 이름으로 저장

C-x s 열려있는 모든 파일 저장

6

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 2: 06 LInux Editor

Linux 편집기

o  Emacs 편집기 n  Emacs 편집기 소개 n  Emacs 설치 n  Emacs 사용법

o  vi 편집기

o  gcc

2

Emacs 편집기 소개

o  Emacs 편집기란 n  Emacs 편집기

o  Richard Stallman에 의해 개발된 에디터 o  간단한 문서 편집으로부터 프로그래밍까지 다양하게 사용

n  특징 o  비 모드형 편집기

n  명령어를 수행하기 위해 ltCtrlgt 또는 ltAltgt 키와 다른 키의 조합을 이용

n  종류 o  GNU Emacs o  XEmacs

3

Emacs 설치

o  Emacs 설치 n  다운로드 httpwwwgnuorgsoftwareemacs n  APT 유틸리티 sudo apt-get install emacs

4

Emacs 사용화면

5

Emacs 기본

o  Emacs 명령어 n  CTRL(control) 또는 META(alt)키와 수식어로 이루어짐

n  Emacs 종료 o  C-x C-c

n  명령 멈추기 o  C-g

n  편집 되돌리기 (Undo) o  C-x u

명령어 내 용

C-s 저장

C-x C-w 다른 이름으로 저장

C-x s 열려있는 모든 파일 저장

6

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 3: 06 LInux Editor

Emacs 편집기 소개

o  Emacs 편집기란 n  Emacs 편집기

o  Richard Stallman에 의해 개발된 에디터 o  간단한 문서 편집으로부터 프로그래밍까지 다양하게 사용

n  특징 o  비 모드형 편집기

n  명령어를 수행하기 위해 ltCtrlgt 또는 ltAltgt 키와 다른 키의 조합을 이용

n  종류 o  GNU Emacs o  XEmacs

3

Emacs 설치

o  Emacs 설치 n  다운로드 httpwwwgnuorgsoftwareemacs n  APT 유틸리티 sudo apt-get install emacs

4

Emacs 사용화면

5

Emacs 기본

o  Emacs 명령어 n  CTRL(control) 또는 META(alt)키와 수식어로 이루어짐

n  Emacs 종료 o  C-x C-c

n  명령 멈추기 o  C-g

n  편집 되돌리기 (Undo) o  C-x u

명령어 내 용

C-s 저장

C-x C-w 다른 이름으로 저장

C-x s 열려있는 모든 파일 저장

6

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 4: 06 LInux Editor

Emacs 설치

o  Emacs 설치 n  다운로드 httpwwwgnuorgsoftwareemacs n  APT 유틸리티 sudo apt-get install emacs

4

Emacs 사용화면

5

Emacs 기본

o  Emacs 명령어 n  CTRL(control) 또는 META(alt)키와 수식어로 이루어짐

n  Emacs 종료 o  C-x C-c

n  명령 멈추기 o  C-g

n  편집 되돌리기 (Undo) o  C-x u

명령어 내 용

C-s 저장

C-x C-w 다른 이름으로 저장

C-x s 열려있는 모든 파일 저장

6

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 5: 06 LInux Editor

Emacs 사용화면

5

Emacs 기본

o  Emacs 명령어 n  CTRL(control) 또는 META(alt)키와 수식어로 이루어짐

n  Emacs 종료 o  C-x C-c

n  명령 멈추기 o  C-g

n  편집 되돌리기 (Undo) o  C-x u

명령어 내 용

C-s 저장

C-x C-w 다른 이름으로 저장

C-x s 열려있는 모든 파일 저장

6

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 6: 06 LInux Editor

Emacs 기본

o  Emacs 명령어 n  CTRL(control) 또는 META(alt)키와 수식어로 이루어짐

n  Emacs 종료 o  C-x C-c

n  명령 멈추기 o  C-g

n  편집 되돌리기 (Undo) o  C-x u

명령어 내 용

C-s 저장

C-x C-w 다른 이름으로 저장

C-x s 열려있는 모든 파일 저장

6

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 7: 06 LInux Editor

Emacs 기본

o  커서 이동

명령어 내 용 C-a 줄의 맨 앞으로 이동

C-e 줄의 맨 끝으로 이동

C-o 새 줄 입력 ( Enter )

M-a 한 단락 앞으로 이동

M-e 한 단락 뒤로 이동

M-f 한 단어 앞으로 이동

M-b 한 단어 뒤로 이동

M-gt 파일의 끝으로 이동

M-lt 파일의 시작 위치로 이동

M- 한 단락 앞으로 이동

M- 한 단락 뒤로 이동

7

C-p

C-n

C-b C-f

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 8: 06 LInux Editor

Emacs 기본

o  텍스트 편집

8

명령어 내 용

C-SPACE 마트 설정 (영역의 처음 또는 끝)

C-w 영역 지우기 M-w 영역 복사 C-y 영역 붙이기 C-t 두 문자를 서로 바꾸기 M-t 두 단어를 서로 바꾸기 M-c 단어의 첫글자를 대문자로 만들기 M-u 단어의 모든 문자를 대문자로 만들기 M-l 단어의 모든 문자를 소문자로 만들기 C-d 한 문자 삭제 ( Delete ) M-d 현재 위치의 한 단어 삭제 M-f 앞의 위치한 한 단어 삭제 M-b 뒤에 위치한 한 단어 삭제

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 9: 06 LInux Editor

Emacs 기본

o  검색

o  질의 치환

명령어 내 용

C-s 단어 찾기 ( 앞으로 )

C-r 단어 찾기 ( 뒤로 )

9

명령어 내 용

M- query-replace 질의 치환하기로 들어감

Space 또는 y 치환하고 다음 인스턴스로 이동 Del 또는 n 치환하지 않고 다음 인스턴스로 이동

현재 인스턴스만 치환하고 빠져나감 lsquo 치환하고 멈춤 묻지 않고 나머지 모두를 치환 ^ 이전 인스턴스로 돌아감

Return 또는 n 질의 치환을 빠져나감

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 10: 06 LInux Editor

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

10

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 11: 06 LInux Editor

Emacs 기본

o  Dired 사용하기 ( 파일 및 디렉토리 관리 ) n  Dired사용 C-x d

11

명령어 명령어 내 용 C 복사 n 다음 줄로 이동

d 삭제 표시 o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동)

D 즉시 삭제 C-o 다른 윈도우에서 파일 탐색 (그 윈도우로 이동 안함)

x d로 표시된 모든 파일 삭제 q Dired 나가기

e or f 파일이나 디렉토리 열기 Q 표시된 파일 내에서 질의 치환

g 디렉토리 다시 읽기 R 파일명 수정

G 그룹 접근 권한 수정 u 파일 표시 제거

k 화면에서 지우기 v 파일 보기

m 문자로 표시 Z 파일 압축

M DEL 포든 파일에 표시 제거 + 디렉토리 생성

= 현재 파일과 다른 파일 비교 M = 현재 파일과 백업 파일 비교

이 파일에서 쉘 명령어 실행 s 날짜 또는 파일명으로 정렬

gt 다음 디렉토리로 이동 lt 이전 디렉토리로 이동

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 12: 06 LInux Editor

vi 편집기

o  Emacs 편집기

o  vi 편집기 n  vi 편집기 소개 n  vi 편집기 실행과 종료 n  vi 편집기 사용 방법

o  gcc

12

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 13: 06 LInux Editor

vi 편집기 소개

o  vi 편집기란 n  vi (visual) 편집기

o  최초의 유닉스 시스템용 화면 편집기 o  캘리포니아 대학의 대학원생 Billy Joy o  라인 편집기인 ed(unix line editor)를 새롭게 개선시켜 개발한 것 o  UNIX 30 BSD에 C Shell과 함께 추가된 프로그램 o  vi보다 훨씬 편하게 사용할 수 있는 vi 클론이 존재

n  vim(vi improved)을 가장 널리 사용 n  배포판의 종류에 따라 vi를 실행하면 실제로 vim 등과 같은 다른 편집기가 실

n  vi 편집기의 세 가지 작동 모드 n  편집 모드 (edit mode) n  명령 모드 (Command mode) n  라인 모드 (Line mode)

13

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 14: 06 LInux Editor

vi 편집기 실행과 종료

o  vi 편집기 실행

n  구문(Syntax) vi [파일명] 파일명이 존재하면 지정된 파일을 보여주고 존재하

지 않으면 새로 생성 -R 파일을 읽기 전용(read-only)으로 열 때 사용

14

ldquovirdquo 만 입력한 후 엔터를 쳤을 때 화면

ldquovi 파일명rdquo 을 입력한 후 엔터를 쳤을 때 화면

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 15: 06 LInux Editor

현재 열린 파일이 읽기 전용임을 표시

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 실행 (contrsquod) n  view file

o  파일을 읽기 전용 모드로 시작해서 편집한 후 다른 이름으로 저장할 때 사용(다른 이름으로 저장할 때는 오류가 나지 않음) [rootlocalhost ~]$ view testtxt

파일의 내용을 변경 후 저장 하려고 할 경우 에러를 출력 함

다른 이름으로 파일 저장 시에는 오류가 나지 않음

15

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 16: 06 LInux Editor

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 n  ESC 키를 누른 후에 ldquo (콜론)rdquo을 누르면 라인 모드 상태가 됨 o  w (write) 저장 o  q (quit) vi 에디터 종료 o  강제적으로 명령을 실행

명령어 내 용

w 편집한 파일을 저장하는 명령 w 뒤에 파일명을 쓰면 다른 이름으로 저장 (단 vi 편집기는 종료하지 않음)

wq 편집 중인 파일을 저장하고 vi 편집기를 종료

q vi 편집기를 종료 수정 사항을 이미 저장한 상태에서만 종료가 가능

q 편집 중인 파일을 저장하지 않고 vi 편집기 종료

x 변경된 내용을 저장하고 vi 편집기종료하기 16

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 17: 06 LInux Editor

vi 편집기 실행과 종료 (contrsquod)

o  vi 편집기 종료 (contrsquod) n  불확실한 종료 시 되살리기

명령어 내 용

vi -r 되살릴 수 있는 모든 파일의 이름을 보여 줌

vi -r filename vi를 시작하고 나서 지정한 파일을 되살려 줌

17

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 18: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 n  기본적인 커서의 이동(명령 모드)

o  간단히 화살표 키를 사용하여 커서를 이동할 수도 있음

입력 키 내 용

H 커서를 한 칸 왼쪽으로 이동

J 커서를 한 줄 아래로 이동

K 커서를 한 줄 위로 이동

L 커서를 한 칸 오른쪽으로 이동

ltBackspacegt 커서를 왼쪽으로 한 문자 이동 ltSpacegt 커서를 오른쪽으로 한 문자 이동

k

l

j

h

18

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 19: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  라인 단위 커서 이동(명령 모드)

입력 키 내 용

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

Enter 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 시작부분으로 이동(공백 포함) ^ 커서를 현재 줄의 시작부분으로 이동(공백 무시) $ 커서를 현재 줄의 맨 끝으로 이동

19

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 20: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  단어 단위 커서의 이동(명령 모드)

입력 키 내 용

e 또는 E 커서를 다음 단어의 끝 글자로 이동

b 또는 B 커서를 이전 단어의 첫 글자로 이동

w 또는 W 커서를 다음 단어의 첫 글자로 이동

20

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 21: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  패턴(정규 표현식)을 이용한 이동(라인 모드)

입력 키 내 용

patterns patterns과 일치하는 곳으로 이동

patterns 검색의 방향을 뒤쪽(backward)으로 진행

문자열 패턴이 printf와 일치하는 곳으로 이동

21

만약 패턴이 일치하는 것이 여러 개 있다면 라인 모드에서 를 입력할 경우 순방향으로 를

입력할 경우 역방향으로 계속해서 검색 할 수 있음

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 22: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 이동 명령 (contrsquod) n  특정 행 번호로 이동(라인 모드)

입력 키 내 용

n n번째 행으로 이동

$ 마지막 행으로 이동

$= 현재 문서의 총 줄(행) 수 출력

= 현재 위치의 행 번호 출력

22

3번째 행으로 이동 마지막 행으로 이동

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 23: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 삽입 명령

o  vi 편집기 삭제 명령

입력 키 내 용

i 입력모드로 전환 커서 위치 앞에 삽입

a 입력모드로 전환 커서 위치 뒤에서 삽입

I 입력모드로 전환 현재 줄의 앞에 삽입

A 입력모드로 전환 현재 줄의 끝에 삽입

o 입력모드로 전환 현재 줄의 아래에 새로운 행을 열고 텍스트를 입력

O 입력모드로 전환 현재 줄의 위에 새로운 행을 열고 텍스트를 입력

23

입력 키 내 용

x 한 문자 삭제 (명령모드)

dw 한 단어 삭제 (명령모드)

dd 현재 행 삭제 (명령모드)

D 현재 행에서 커서 오른쪽 내용을 삭제 (명령모드)

5 10 d 5-10째 행 삭제 (라인모드)

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 24: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 복사 및 이동 명령 (contrsquod) n  복사 및 이동 명령어

o  Ex1) dd 명령으로 행 삭제 또는 yy 명령으로 행 복사를 수행 한 후 p 명령을 사용하여 원하는 곳에 삭제 또는 복사된 라인을 붙여넣기 할 수 있음

o  Ex2) 명령 모드에서 v를 누른 뒤 범위를 지정하고 y로 범위 지정을 마친 후 p 명령을 이용하여 원하는 곳에서 복사한 라인을 붙여넣기 할 수 있음

입력 키 내 용

yy 현재 행 복사 (명령모드)

Y 현재 행 복사 (명령모드)

p 복사 되거나 삭제된 행을 현재 행 아래에 삽입 (명령모드)

P 복사 되거나 삭제된 행을 현재 행 위에 삽입 (명령모드)

12 co 3 1~2행을 3행 다음으로 복사 (라인모드)

45 m 6 4~5행을 6행 다음으로 이동 (라인모드)

v 복사할 곳의 범위를 지정(문자 단위) (명령모드)

V 복사할 곳의 범위를 지정(Line 단위) (명령모드)

24

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 25: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기(라인 모드) 입력 키 내 용

w 편집한 파일을 저장하는 명령

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 저장 할 수 없음)

w filename 문서의 내용을 지정한 파일에 저장 (파일이 존재 할 경우 덮어쓰기 실행)

25

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 26: 06 LInux Editor

1행부터 현재 행(6행)까지 copytxt 파일로 저장

현재 행

총 6행의 36글자가 잘 저장되었다는 메시지

vi 편집기 사용방법 (contrsquod)

o  파일 저장하기 (contrsquod) n  파일의 일부분 저장(라인모드)

입력 키 내 용

beginend w filename begin행부터 end 행까지 filename으로 저장

1 w filename 1행부터 현재 행까지 filename으로 저장

1 w gtgt filename 1행부터 현재 행까지 filename으로 추가

26

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 27: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 n  문자 및 문자열 단위의 치환(명령 모드)

o  편집할 때 치환 명령은 lsquorrsquo과 lsquoRrsquo 명령을 주로 사용 o  lsquorrsquo 명령

n  ndash 커서가 위치하는 문자 오직 하나만을 다른 문자로 교체 o  lsquoRrsquo 명령

n  ndash 입력모드로 커서가 있는 문자부터 새로운 문자를 Esc키를 누를 때까지 계속 덮어쓴다

o  주의 lsquorrsquo 명령대신 lsquoRrsquo 명령을 사용한 경우 n  10485761048577104857810485791048580104858110485821048583104858410485851048586104858710485881048589104859010485911048592104859310485941048595104859610485971048598104859910486001048601104860210486031048604104860510486061048607104860810486091048610104861110486121048613104861410486151048616104861710486181048619104862010486211048622104862310486241048625104862610486271048628104862910486301048631104863210486331048634104863510486361048637104863810486391048640104864110486421048643104864410486451048646104864710486481048649104865010486511048652104865310486541048655104865610486571048658104865910486601048661104866210486631048664104866510486661048667104866810486691048670104867110486721048673104867410486751048676104867710486781048679104868010486811048682104868310486841048685104868610486871048688104868910486901048691104869210486931048694104869510486961048697104869810486991048700104870110487021048703 ESC 키를 눌러 명령 모드로 전환한 후에 lsquoursquo 명령을 사용하여 변경내용 취

입력 키 내 용

R 커서가 있는 위치부터 덮어쓰기 시작한다 단 ESC키를 누를 때까지 덮어쓴다

r 커서가 위치한 곳의 한 글자만 치환한다(덮어 쓴다) s 커서가 있는 문자 삭제 후 입력모드로 전환

S 커서가 있는 줄을 삭제한 후 입력모드로 전환

cb 커서가 있는 앞 문자 삭제 후 입력모드 27

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 28: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  vi 편집기 치환 명령 (contrsquod) n  x행과 y행 사이의 패턴을 찾아 치환 문자열로 치환(라인모드)

o  행 번호 지시 대신 문자를 사용하면 전체 파일을 지칭할 수 있음 n  $는 파일의 마지막 행을 뜻함 n  x y를 적지 않으면 현재 행에 적용

o  플래그 n  g 일치하는 패턴 모두를 치환하라는 지시 사항 n  c 치환할 때마다 물어 보라는 지시 사항

o  사용 예 Ex1) 110s1234abcd ndash 1행과 10행(10행도 포함) 사이에서 1234를 찾아 abcd로 치환 Ex2)sstrrepg ndash 파일 전체의 str을 rep로 치환

[xy]s패턴치환문자열플래그

28

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 29: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  다른 파일 포함시키기

입력 키 내 용

r filename 지정한 파일의 내용을 현재 커서가 있는 줄 다음에 불러온다

vi filename 편집기를 시작할 때부터 특정 파일을 불러와서 시작한다

test1txt 파일의 내용 1줄 32문자가 불려졌다는 메시지

현재 커서가 있는 줄(마지막 줄) 다음 줄에 test1txt 파일의 내용을 불러옴

현재 커서가 있는 줄

29

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 30: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기 n  처음 vi를 실행할 때 파일명을 두개 이상 지정하면 파일 사이를 이동할 수 있음(파일 명을 한나만 지정하여도 (n filename) 을 이용하여 다른 파일로 이동할 수 있음)

o  w 로 file1을 저장하고 n 으로 다음 파일(file2)을 불러올 수 있음

$ vi file1 file2

30

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 31: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  여러 파일 편집하기

여러 개의 파일을 열지 않았을 경우에도 n filename 을 이용하여 다른 파일로 이동할 수 있음

31

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 32: 06 LInux Editor

o  여러 파일 편집하기 (contrsquod) n  다른 파일 편집하기(라인모드)

vi 편집기 사용방법 (contrsquod)

입력 키 내 용

e filename 현재 파일의 편집을 마친 후 다른 파일을 편집하고 싶을 때 사용 (현재 파일의 수정 내용을 저장(w)해야 편집을 종료할 수 있음)

testtxt 파일 편집을 끝낸 후 test1txt 파일이 불려짐

32

testtxt 파일의 편집을 마친 후(파일 저장 후) test1 파

일을 불러옴

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 33: 06 LInux Editor

vi 편집기 사용방법 (contrsquod)

o  행 번호 붙이기

입력 키 내 용

set number set nu se nu

행 번호 붙히기

set nonumber

set nonu se nonu

행 번호 없애기

33

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 34: 06 LInux Editor

ls 명령 실행 결과를 보여줌

vi 편집기 사용방법 (contrsquod)

o  쉘 명령 실행하기(라인모드) 입력 키 내 용

vi 내부에서 쉘 명령을 실행할 수 있음

r 명령이 표준 출력에 보낸 결과 내용을 버퍼에 포함시키고 화면에 출력

엔터를 칠 경우 다시 원래 작업 창으로 돌아 감

34

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 35: 06 LInux Editor

o  쉘 명령 실행하기 (contrsquod)

vi 편집기 사용방법 (contrsquod)

ls 실행 결과를 현재 커서의 위치에 삽입

35

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 36: 06 LInux Editor

gcc

o  Emacs 편집기

o  vi 편집기

o  gcc n  gcc 기본 개념 및 사용법 n  gcc 옵션

36

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 37: 06 LInux Editor

37

gcc 기본 개념 및 사용법

o  gcc란 n  원래는 ldquoGNU C Compilerrdquo를 의미

n  1999년부터 ldquoGNU Compiler Collectionrdquo을 의미한다 따라서 C 언어

뿐 아니라 C++ 오브젝티브 C 포트란 자바 등의 컴파일러를 포함하

는 포괄적 의미를 가짐

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 38: 06 LInux Editor

38

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc란 (contrsquod) n  일반적으로 gcc를 컴파일러라고 하지만 정확히 말하면 gcc는 소스

파일을 이용해 실행 파일을 만들 때까지 필요한 프로그램을 차례로

실행시키는 툴

컴파일 cc1

어셈블 as

링크 ld

xxxi xxxs xxxo aout xxxc

소스 파일 전처리된 파일 어셈블리어 파일 오브젝트 파일 실행 파일

전처리 ccp

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 39: 06 LInux Editor

39

gcc 기본 개념 및 사용법 (contrsquod)

o  gcc 기본 사용법 n  gcc는 파일 확장자에 따라 처리 방법을 달리 함

o  예) 대표적인 확장자 c 인 경우는 gcc로 전처리기 컴파일 어셈블 링크 과정을

거쳐야 실행 파일이 완성 됨

확장자 종류 처리 방법

c C 소스 파일 gcc로 전처리 컴파일 어셈블 링크

s 어셈블리어로 된 파일 어셈블 링크

S 어셈블리어로 된 파일 전처리 어셈블 링크

o 오브젝트 파일 링크

a so 컴파일된 라이브러리 파일 링크

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 40: 06 LInux Editor

40

gcc 기본 개념 및 사용법 (contrsquod)

o 실습예제

[실습예제] filec

include ltstdiohgt

int main()

printf (ldquoHello Linuxnrdquo)

return 0

[rootlocalhost ~]$ gcc ac

[rootlocalhost ~]$ aout

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 41: 06 LInux Editor

o 실습예제

gcc 기본 개념 및 사용법 (contrsquod)

생성 된 실행 파일

41

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 42: 06 LInux Editor

42

gcc 옵션

o  gcc 옵션

옵 션 의 미

-c 소스파일을 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

-o 바이너리 형식의 출력 파일 이름을 지정하는데 지정하지 않을 시 aout 이라고 기본이름 생성

-I 헤더 파일을 검색하는 디렉토리 목록을 추가

-S 소스파일을 어셈블리 파일로만 컴파일

-E 소스파일을 전처리 단계까지만 처리

-L 라이브러리 파일을 검색하는 디렉토리 목록을 추가

-l 라이브러리 파일을 컴파일 시 링크

-g 바이너리 파일에 표준 디버깅 정보를 포함

-ggdb 바이너리 파일에 GNU 디버거인 gdb 만이 이해할 수 있는 많은 디버깅 정보를 포함시킴

-O 컴파일 코드를 최적화 함

-Olevel 최적한 level 단계를 지정( level은 1~3이 존재)

-DFOO=RAR 명령라인에서 BAR 값을 가지는 FOO 라는 선행 처리기 매크로를 정의

-static 정적 라이브러리에 링크

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 43: 06 LInux Editor

43

gcc 옵션 (contrsquod)

o  gcc 옵션 (contrsquod) 옵 션 의 미

-ansi 표준과 충돌하는 GNU 확장안을 취소 ANSIISO C 표준을 지원 ANSI 호환코드를 보장 안 함

-traditional 과거 스타일의 함수 정의 형식과 같이 전통적인 KampR C언어 형식을 지원

-MM make 호환의 의존성 목록을 출력

-V 컴파일의 각 단계에서 사용되는 명령을 보여 쥼

-llib Link시 해당 lib를 같이 link하게 함

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 44: 06 LInux Editor

44

gcc 옵션 (contrsquod)

o  -o 옵션

n  생성되는 출력 파일 이름을 지정

n  Syntax gcc ndasho 출력파일이름 소스파일이름

gcc 소스파일이름 -o 출력파일이름

(출력파일과 소스파일의 순서는 바뀌어도 상관없음)

o  filec 소스파일에 file 이라는 출력파일 이름을 지정해 주어서 aout 이라는 기본 파

일을 생성하지 않음

[rootlocalhost ~]$ gcc ndasho b bc

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 45: 06 LInux Editor

o  -o 옵션(contrsquod)

gcc 옵션 (contrsquod)

생성 된 실행 파일

45

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 46: 06 LInux Editor

o  -c 옵션

n  소스를 오브젝트 파일로만 컴파일하고 링크하는 과정을 생략

n  Syntax gcc ndashc 소스파일이름

gcc 옵션 (contrsquod)

46

생성 된 오브젝트 파일

오브젝트 파일을 이용해 c 라는 실행 파일 생성

오브젝트 파일을 이용해 생성 된 실행 파일

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 47: 06 LInux Editor

47

gcc 옵션 (contrsquod)

o  -c 옵션 (contrsquod) n  분리 컴파일

o  여러 파일로 분리 작성된 하나의 프로그램을 컴파일

[예제 1] mainc extern void hi() main() hi()

[예제 2] hic include ltstdiohgt void hi() printf (ldquoLinux World nrdquo)

[rootlocalhost ~]$ gcc mainc hic -o test

[rootlocalhost ~]$ gcc ndashc mainc

[rootlocalhost ~]$ gcc ndashc hic

[rootlocalhost ~]$ gcc maino hio ndasho test

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 48: 06 LInux Editor

o  -c 옵션 (contrsquod)

gcc 옵션 (contrsquod)

48

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 49: 06 LInux Editor

49

gcc 옵션 (contrsquod)

o  -I 옵션

n  표준 디렉토리가 아닌 위치에 있는 헤더 파일의 디렉토리를 지정

n  Syntax gcc 소스파일이름 ndashI 디렉토리이름

[예제 1] agec include ltstdiohgt

include ldquomyheaderhrdquo

main()

printf(ldquodnrdquo AGE)

[예제 2] myheaderh define AGE 20

[rootlocalhost ~]$ gcc agec ndashI 헤더파일이 있는 디렉토리 경로

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 50: 06 LInux Editor

make 프로그램

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 51: 06 LInux Editor

Contents

o make 란

o Makefile

o 몇 가지 문법 규칙

o make 옵션

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 52: 06 LInux Editor

make란

test

co ao xo yo zo

ac bc cc xc yc zc

bo hellip

위와 같이 여러 파일로 구성된 프로그램이 있을 경우 cc 소스파일을 수정하면

모든 파일을 다시 컴파일하고 링크해야 수정이 반영된 test 파일이 생성됨

즉 파일을 하나만 수정해도 모든 파일을 다시 컴파일 해야함

make는 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는

기존 오브젝트 파일을 그대로 이용하게 해주는 유틸리티 툴

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 53: 06 LInux Editor

Makefile

o  Makefile n  Makefile은 애플리케이션의 구성방법을 make에 알려주는 텍스트 파

o  형식

예제)

test testc gcc testc -o test

대상 의존부분(dependents) 또는 선결조건(prerequisites)

명령 대부분 컴파일 호출 명령을 사용 시에는 반드시 탭 문자로 시작해야 함

대상(target) 대상에 의존되는 파일1 [파일2 hellip]

[tab간격] 명령(command)

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 54: 06 LInux Editor

Makefile (contrsquod)

o  Makefile 생성시 주의 사항 n  각 요소를 구분하는데 있어 콤마() 같은 건 사용하지 않고 공백으로

n  명령을 시작하기 전에는 항상 ltTABgt을 넣음

o 절대 스페이스 키나 다른 키는 사용해선 안됨

o 그 밖의 다른 곳에서는 ltTABgt을 사용하지 말 것

n  Makefile 내에서 항목의 순서는 중요하지 않음

o make는 어떤 파일이 어느 곳에 의존적인지 알아내어 올바른 순서로 명령을 수행

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 55: 06 LInux Editor

Makefile (contrsquod)

o  Makefile 예제

[예제 1] test1c include ltstdiohgt

include ldquoahrdquo

void func1()

void func2()

main()

printf(ldquotest1nrdquo)

func1 ()

func2 ()

[예제 2] test2c include ltstdiohgt include ldquoahrdquo include ldquobhrdquo extern void func1() printf(ldquotest2 nrdquo)

[예제 3] test3c include ltstdiohgt include ldquobhrdquo include ldquochrdquo extern void func2() printf(ldquotest3 nrdquo)

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 56: 06 LInux Editor

Makefile (contrsquod)

o  Makefile 예제 (contrsquod)

① 헤더 파일 생성

[rootlocalhost ~]$ touch ah

[rootlocalhost ~]$ touch bh

[rootlocalhost ~]$ touch ch

② Makefile 생성

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c

③ make 실행 (make)

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 57: 06 LInux Editor

o  Makefile 예제 (contrsquod) o  make clean

소스파일만 남기고 생성된 다른 파일들은 지워줌

o 실행 o  make clean

Makefile (contrsquod)

[ltMakefile] test test1o test2o test3o gcc -o test test1o test2o test3o test1o test1c ah

gcc -c test1c test2o test2c ah bh gcc -c test2c test3o test3c bh ch gcc -c test3c clean

rm ndashf test test1o test2o test3o

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 58: 06 LInux Editor

몇 가지 문법 규칙

o  매크로(Macro) n  Makefile을 작성하다 같은 파일 이름을 여러 번 써야 하는 경우 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있음 o  ldquoMacro makes makefile happyrdquo

n  매크로 사용시 대소문자 모두 가능

o  보통 대문자로 쓰는 것이 관례

n  Makefile 상단에 정의

M_NAME = value

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 59: 06 LInux Editor

몇 가지 문법 규칙 (contrsquod)

o 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o test $(OBJF)

test1o test1c ah

gcc -c test1c

test2o test2c ah bh

gcc -c test2c

test3o test3c bh ch

gcc -c test3c

clean

rm ndashf $(OBJF)

매크로 정의

$(OBJF) = test1o test2o test3o

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 60: 06 LInux Editor

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 내부 매크로 의 미

$ 현재 목표 파일의 이름

$ 확장자를 제외한 현재 목표 파일의 이름

$lt 현재 필수 조건 파일 중 첫 번째 파일 이름

$ 현재 대상보다 최근에 변경된 필수 조건 파일 이름

$^ 현재 모든 필수 조건 파일들

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 61: 06 LInux Editor

몇 가지 문법 규칙 (contrsquod)

o  내부 매크로 사용 예제

[Makefile]

OBJF = test1o test2o test3o

test $(OBJF)

gcc -o $ $^

test1o test1c ah

gcc -c $lt

test2o test2c ah bh

gcc -c $c

test3o test3c bh ch

gcc -c $c

clean

rm -f $(OBJF)

현재 대상 파일의 이름을 의미하므로 test를 나타냄

OBJF로 정의된 매크로 값

현재 대상 파일 test1o가 의존하는 필수 조건 파일 중 첫 번째 파일 이름을 의미 test1c

확장자 c 를 제외한 현재 대상 파일의 이름을 의미 각 각 test2 test3 을 의미

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 62: 06 LInux Editor

몇 가지 문법 규칙 (contrsquod)

o  접미사 규칙

예제) co ① gcc -c $lt $(CFLAGS) ②

① co c 라는 확장자를 가진 파일을 사용해 o 라는 확장자를 가진 파일을 만들 것임을 make에 알리는 역할을 한다 ② $lt

확장자가 c인 파일명을 의미한다 $(CFLAGS) C 컴파일러를 위한 플래그를 위해 미리 정의된 변수

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 63: 06 LInux Editor

몇 가지 문법 규칙 (contrsquod)

o  패턴 규칙 n  암시적 규칙에 의존 했을 경우 일어나는 오류방지

n  접미사 규칙과 비슷하나 더 뛰어난 기능을 가짐

[Makefile]

OBJF = test1_do test2_do test3_do

test $(OBJF)

gcc -o $ $(OBJF)

_do c

gcc -c -g $lt -o $

clean

rm ndashf $(OBJF)

확장자 c 인 모든 파일에 대해 _d 를 붙인 오브젝트 파일을 생성하겠다는 의미

-g 옵션을 주어 컴파일 시 디버깅 정보를 삽입

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 64: 06 LInux Editor

make 옵션

옵션 의미

-f 파일이름 GNUmakefile makefile Makefile 외의 이름을 갖는 make 파일을 실행시킬 때

사용자 임의의 파일 이름을 지정한다

-n make가 실행하는 명령을 출력만 하고 실제로 실행 하지 않는다

-W 파일이름 파일 이름이 변경된 것처럼 동작한다

-s make가 실행하는 명령을 출력하지 않고 실행한다

-r make의 모든 내장 규칙을 사용할 수 없다

-d make 실행 시 많은 디버깅 정보도 같이 출력한다

-k 한 대상을 구성하는데 실패해도 다음 대상을 계속 구성한다

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 65: 06 LInux Editor

make 옵션 (contrsquod)

o  -f 옵션

o  -n -W 옵션

기 능 표준 파일 외의 파일을 실행

기본형 make ndashf 파일이름

기 능 실행하지는 않으면서 실행해야 할 명령을 출력한다

기본형 make ndashn

기 능 파일이 변경 된 것처럼 동작한다

기본형 make ndashW파일이름

-n 은 make`testrsquo is up to date 라는 메시지만 출력하고 아무런 명령도 출력하지 않는다

그러므로 -W 와 같이 사용해 특정 파일이 변경 된 것처럼 동작하게 한다

-n 과 같이 사용되어 대상 파일에는 영향을 주지 않고 명령 수행을 한다

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 66: 06 LInux Editor

make 옵션 (contrsquod)

o  -s 옵션

o  -r 옵션

기 능 실행하는 명령을 출력하지 않고 실행한다

기본형 make ndashs 파일이름

기 능 모든 내장 규칙을 사용할 수 없게 한다

기본형 make ndashr

-s 는 실행 명령이 많고 출력이 불필요한 경우에 유용하다

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 67: 06 LInux Editor

make 옵션 (contrsquod)

o  -d 옵션

o  -k 옵션

기 능 디버깅 정보를 출력한다

기본형 make ndashd

기 능 명령에 실패해도 계속 동작한다

기본형 make ndashk

-d 는 gcc의 ndashg 옵션과 마찬가지로 make 파일도 make 실행 시 디버깅 정보를 출력

-k 는 make가 명령을 실행하는 데 실패해도 잘못된 명령을 실행 했다는 메시지만 출력될 뿐

나머지 명령은 계속 실행한다

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68

Page 68: 06 LInux Editor

참고문헌

[1] 이종우 류연승 ldquoLINUX 관리자 가이드 3erdquo 사이텍미디어 pp 131 [2] 박승규 ldquoRedHat Linux 9rdquo 한빛미디어 pp 229 - 245 [3] 이만용 ldquo러닝 리눅스rdquo 한빛미디어 pp 357 - 385 [4] 한국정보통신인력개발센터 ldquo리눅스마스터 2급 표준 교재rdquo 사이텍미디어

pp 211 - 229

68