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 )