2016년 7월 30일 토요일

make 유닉스.리눅스 필수 유틸리티 - 1장 요약

제1장 컴파일, 실행 ,디버그

$make program
  • make : make 명령어
  • program : Target 이라고 하며, 필요항목(prerequisites) 또는 종속항목(dependents)이라는 하나 이상의 파일들을 기반으로 작성(build)된다. 그리고 이들 파일들은 다른 종속 혹은 필요항목에 가지고 있다.

기술파일
예)
1 program : main.o iodata.o  --> 종속행 (dependency line) 혹은 규칙행(rule
2 <tab>cc -o program main.o iodata.o --> 명령행(command line) *** 반드시 탭로 시작 해야한다.

  • program : target
  • : : 타켓과 명령행 혹은 규칙행을 구분 한다. (만약 길면 \)
  • main.o iodata.o : 종속행 혹은 규칙행
  • <tab>cc - o program main.o iodata.o : 명령행 , 반드시 [tab] 으로 시작 해야 한다.

make 실행
일반적인 전제 조건
  • 기술 파일과 프로젝트 파일은 동일한 디렉토리에 있음
  • 기술 파일명은 makefile 혹은 Makefile 이다.
  • make 입력 시점은 현재 디렉토리이다.

$make target

  • target이 최종 생성 후에 수정되거나 제거된 필요 항목 파일이 전혀 없으면 make는 다음 메시지를 보내 준다.
'target' is up to date 혹은 make: Nothing to be done for `all'.
메시지를 출력한다.

  • 없는 target를 만들려고 시도 하면 아래와 같은 메시지를 출력한다.
$make nontarget
make : Don't know how to make nontarget. Stop.

  • 경우에 따라 여러개의 target을 한 번에 make에 전달하여 실행 시킬 수도 있다.
예) $ make main.o iodata.o

  • target 이름 없이 간단히 입력하는 경우는 기술파일(makefile)에 첫 번째 target(예: program)이 만들어 진다.

$ make 

구문의 기본 규칙
  • ** 모든 명령(행)들은 탭 문자로 시작 해야 한다. (다른 행이 탭으로 시작 하지 않도록
    주의) 탭문자를 확인 하기 위한 명령어 
    $ cat -v -t -e makefile
option 설명
-v , -t : 모든 탭을 ^I 표시
-e : 행의 마지막에 달러 기호($)를 표시 한다.
  • 두줄이상을 이어쓰기 할때는 \(역슬래시) 사용한다. 주의) 행이 바뀌는 문자 바로 앞에 위치 해야 함. 역슬래시와 행이 시작하는 문자사이에는 어떤 여백도 있으면 안됨
  • 빈줄은 무시 함.
    • # : 주석 처리를 함.
    • ; : 을 사용하여 명령어를 계속 이어 갈 수 있음.
ex) plot_prompt : prompt.o ; cc -o plot_prompt prompt.o --> 탭으로 명령어를 시작해야 하는 것에 대한 예외
  • 단일한 target을 여러 종속 항목 행들에 표시 할 수도 있다.
ex)
file.o : /usr/src/file.c
   cc -c /usr/src/file.c
.
.
.
file.o : global.h defs 

  • 이중 콜론 ( :: ) : 종속 항목 행이다. 이 구문의 라이브러리를 만드는 데 유용하다.
  • 필수 항목이 없는 Target 만들 수 있다.(물론 콜론은 반드시 있어야 한다.)
ex) 
   clean:
/bin/rm -f core *.o

  • 되도록 alias(앨리어스)나 환경변수 또는 조건 (if or for)처러 여러 줄 된 명령 행은 사용하지 않도록 한다. (cd도 물론)
출처 - make (한빛미디어)

댓글 없음: