2010년 9월 25일 토요일

myadd 프로그램을 수정하기

목표:  
myadd 프로그램을 수정하여
                                음수 입력도 가능하게 만들기.


1. myadd 파일의 이해

- cmdlines.tar.gz의 압축을 해제하고, 본격적으로 수정할 소스가 있는
  cmdlines  폴더에 들어갑니다.
- RCS 폴더만이 있고 #make myadd를 입력합니다.
- 수업중에 간단하게 작성한 Makefile에 의해서 myadd 및 기타파일을 생성
  되고,  다시 #make clean을 입력하면 clean 설정된 모든 파일을 삭제합니다.
  (결국, myadd를 제외한 모든 파일은 삭제됩니다. )


2. myadd 파일 수정.
- 수업중에 수정한 음수 입력이 되지 않는 상태의  options.h options.c myadd.c
   파일을 활용하였습니다.
- RCS로 버전관리를 하면서 소스를 수정하였습니다.
-  음수를 인식 할 수 없는 이유는,  숫자가 (-)와 함께 들어오면
   알수 없는 인자로 판단이 되기 때문입니다.
-  while 문의 조건절에서 getopt_long 함수의 인자 중 숫자 이용해 음수도
    인식하게 하였습니다.


3. Makefile 생성.

-  Makefile이란?
  보통 라인 수가 많아지면 여러 개의 파일로 나누어 (모듈로 나누어)
개발을 하게 됩니다. 이들은 알게 모르게 서로 관계를 가지고 있는데,
어느 하나를 필요에 의해 바꾸게 되었을 때 그 파일에 있는 함수를 이용
하는 다른 파일도새롭게 컴파일되어야 합니다.  하지만 파일 수가 많은
경우 이를 일일이 컴파일을 하게 될 때, 그 불편함과 함께 컴파일하지
않아도 될 것도 컴파일을 하게 될 수도 있고, 컴파일해야 할 것도 미처
못하게 되는 경우가 있습니다. 이런 상황에서 지능적으로 관계 있는 것만
새롭게 갱신을 할 필요가 있을 때 make파일은 사용하게 됩니다. 하지만
make 명령은 내장된 지식을 많이 가지고 있지만 스스로 응용프로 그램을
빌드하는 방법을 알지는 못하기 때문에 make가 응용프로그램을 어떻게
생성하는지 알려줘야하는데 이 파일을 Makefile이라고 합니다.

- myadd가 만들어지기 위해서는 myadd.o, options.o가 필요하고 각각의 목적
  파일들은 모두 자신의 소스 파일과 *.h 에 의존을 합니다.
  그러므로, 다으과 같이 Makefile을 작성하였습니다.
   myadd: myadd.o options.o
   myadd.o: myadd.c options.h
   options.o: options.c options.h

- clean을 설정하여 #make clean을 입력하면 myadd를 제외한 모든파일이
  삭제되도록 하였습니다.
  
# TIP #  매크로의 사용

Makefile을 보면 교수님이 작성한 것과 같이 간단한 매크로 기능을 사용할 수
있습니다.

예) main.o read.o write.o라는 것을 OBJECTS 라는 매크로로 바꾸기.

OBJECTS = main.o read.o write.o

test : $(OBJECTS)
                gcc -o test $(OBJECTS)

main.o : io.h main.c
                gcc -c main.c
read.o : io.h read.c
                gcc -c read.c
write.o: io.h write.c
                gcc -c write.c


 위에서 보다시피 매크로는 그냥 프로그램 짤 때와 같이 사용해서 값을
대입합니다.  대신 사용할 때는 반드시 $(..) 안에 넣어서 사용합니다.


4. 압축하기

 tar cvf myadd.tar RCS/
  (RCS폴더에 있는 파일들을 myadd.tar로 압축하였습니다.)
- gzip myadd.tar
  (myadd.tar 압축파일을 myadd.tar.gz의 형태로 압축하였습니다.)


# 압축풀기gunzip filename.tar.gz
 ( tar.gz에서 gz를 풉니다..)
tar xvf filename.tar  
( tar를 풀어냅니다.  x : 압축풀기, v : 압축푸는 상태 보기, f : 파일 이름)
tar xvzf filename.tar.gz  
( tar.gz를 한번에 풉니다. 안될 경우 위의 순차적인 방법으로 합니다.)

# 압축하기
tar cvf filename.tar file1 file2   
( file1 file2 등의 파일이나 폴더를 filename.tar로 묶습니다.)
gzip filename.tar                    
( filename.tar를 filename.tar.gz로 압축합니다.)
tar cvzf filename.tar.gz file1 file2  
( file1 file2 등의 파일이나 폴더를 filename.tar.gz로 한번에 묶고 압축합니다.)
 
 
5. 동작확인
- tar xvzf myadd.tar.gz 을 입력하여 압축을 해제합니다.
- 압축을 풀면 RCS폴더 하나가 생성된것을 볼 수 있습니다.
- RCS폴더에 들어가지 말고 들어가기 전에 #make를 입력합니다.
   (myadd를 포함한 *.o, *.c *.h등의 파일들이 생성된것을 볼 수 있습니다.)
- ./myadd를 통하여 프로그램을 실행시키면 음수가 계산되는 것을 볼 수
   있습니다.
 
 
# make clean
 
 
 
 
 
 
 
- make clean을 입력하면 myadd 파일을 제외한 모든  파일이 삭제되는
 것을 볼 수 있습니다.
 
 
# 파일첨부 #  ( myadd.tar.gz )

댓글 없음:

댓글 쓰기