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 (한빛미디어)

crontab

crontab 관련 설명 

crontab [ -e | -l | -r | -u ]
option 설명
 -e : Edit
 -l : List
 -r : Remove
 -u : User

cron Daemon - cron Daemon 초기설정될 때만 crontab 파일을 확인함.
 crontab 명령을 사용하여 crontab 파일에 변경을 수행할 때,
 변경을 나타내는 메세지가 cron Daemon으로 전송됩니다.
 이것으로 새로운 또는 변경된 파일에 대해 정기적으로 계획된 간격으로
 오버헤드를 점검하지 않아도 됩니다.

crontab File Format
::::::::::::::::::::::::::::::::::::::::::::
①  ②  ③  ④  ⑤  ⑥
MINUTE(분)  HOUR(시)    DAY_OF_MONTH(일)    MONTH(월)   WEEKDAY(요일)   COMMAND(명령)
①  -   MINUTE(분)          : 0 - 59
②  -   HOUR(시)            : 0 - 23
③  -   DAY_OF_MONTH(일)    : 0 - 31
④  -   MONTH(월)           : 0 - 12
⑤  -   WEEKDAY(요일)       : 0(일) - 7(일)
⑥  -   COMMAND(명령)       : shell 명령

- : 값말고 있는 문자
    No-No : 숫자범위
    No,No : 숫자만 실행
    *     : 전체
주석      : 행의 첫글자 #
::::::::::::::::::::::::::::::::::::::::::::

crontab 파일 예제

# 명령어를 실행 쉘 지정
SHELL=/bin/sh
# 편지를 받을 사용자 지정
MAILTO=paul
#
# 매일 00시 05분에 특정작업을 하는 경우
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# 매달 1일 오후 2시 15분에
15 14 1 * *     $HOME/bin/monthly
# 월요일부터 금요일 까지 매일 오후 10시에.
0 22 * * 1-5   mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "이것은 매일 0, 2, 4, ... 시 23분에 보여집니다."
5 4 * * sun     echo "이것은 매 일요일 오전 4시 5분에 보여집니다."