makefile 사용방법(rm, -rf, echo, @), linux 용어(sshd,server,client,path,set), ATmega makefile 분석
makefile 사용 방법.
→ make 파일을 따로 만들지 않아도, make main 이라고만 입력하면
gcc -o -c main.c -o main 이라고 만들어 진다.
※ make와 make all은 같다.
→ 그리고 다시 곧바로 make main을 입력해 보면
make: 'main'은 이미 갱신되었습니다. 라고 출력된다.
→ 이것은 소스파일과 실행파일의 생성시간을 비교해서 실행파일의 생성시간이 소스파일의 저장시간보다 늦다면 컴파일을 하지 않기 때문이다. 만약 소스파일의 수정이 이루어져 저장된 시간이 실행파일의 생성시간과 같거나 혹은 늦다면 컴파일을 다시 실행한다.
(나중에 프로그램 소스가 커지고 풀 컴파일을 하게 되면 컴파일 과정이 수 시간씩 걸리게 되므로 파일을 잘게 쪼개어(분할하여) 변경된 파일만 컴파일 하게 함으로써 시간을 단축시켜 효율적으로 사용 가능하다.)
- linux
⇒ 명령어 --help → 도움말을 볼 수 있다.
⇒ set → 환경변수(dos도 가능 - 둘 다 unix 계열이므로 비슷하다.)
⇒ path → ; 단위로 찾는다.
→ 경로가 너무 길면 찾는데 시간이 오래 걸린다.
→ path 안에 명령을 넣어두면 어디서든 사용할 수 있다.
⇒ bin(binary) → root 용 실행파일 경로
⇒ daemon → 문지기 (ex. ftp daemon → ftpd*)
→ 서비스를 뜻하며 이것은 서버를 지칭하기도 한다.(항상 돌고 있는 프로그램)
⇒ sshd(security shell daemon) → telnet을 암호화 시킨 것(telnet은 암호화가 안 되어 있다.)
⇒ server (하인 - 서비스를 제공한다.)
client (고객 - 서비스를 제공받는다.)
⇒ Zterm 프로그램도 역시 client의 일종(Zterm을 우리가 쓰고 sshd 가 server를 제공해 준다.)
웹서버 - 구글, 야후, 네이버, 클라이언트 - 크롬, 익스플로러
⇒ symbolic link → 다른 파일에 대한 추상적인 위치를 가리키는 경로(바로가기)
- makefile
형식
→ 대상 : 대상에 의존되는 파일1 2 3 ...
탭간격 명령
// 예제 (→ vi makefile)
CC = gcc # CC는 변수
all : main.o hello.o # all에 해당하는 명령을 실행하기 위해서는 main.o hello.o가 필요하다고 선언(의존성)
$(CC) -o emb main.o hello.o # 변수를 사용할 때는 $(변수)라고 쓰며 명령 앞에는 반드시 tab 키를 사용해서 띄워야만 한다.
main.o : main.c
$(CC) -c main.c
hello.o : hello.c
$(CC) -c hello.c
clean : #의존파일을 넣을 필요 없다.
@echo main.o hello.o emb eraser #지울 파일들을 표시해 주었다.
@rm -rf main.o #rf(r은 물어보지 않는다. f는 강제로. 즉, 물어보지 않고 모두 지운다.)
@rm -rf hello.o
@rm -rf emb
run : all #all의 실행이 선행되어야지 run이 동작한다.
@ls -al #ls -al이 실행된다.
@./emb #실행 파일 실행
⇒
⇒ make
⇒ echo → 다음에 글자가 출력된다. (메시지를 넣을 수 있다.)
@echo → echo 글자가 보이지 않는다.
⇒ @echo 넣으면 명령어의 출력을 감춘다. (실행은 되고 있다.)
⇒ 주석은 맨 앞에 #을 붙이면 된다.
ATmega128 makefile 훑어보기
# MCU name
MCU = atmega128
# Processor frequency.
# Typical values are:
F_CPU = 16000000 #16M 라는 뜻 (atmega 칩 옆에 16.000 이라고 써있다.)
16000000~16000999에서 000과 999 는 오차.
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = main #ATmega에서 main 파일을 TARGET이라 한다.
# Object files directory
# To put object files in current directory, use a dot (.), do NOT make
# this an empty or blank macro!
OBJDIR = .
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# Debugging format.
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
# AVR Studio 4.10 requires dwarf-2.
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
DEBUG = dwarf-2
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99 #gnu 방식을 사용한다.
# Place -D or -U options here for C sources
CDEFS = -DF_CPU=$(F_CPU)UL
# Place -D or -U options here for ASM sources
ADEFS = -DF_CPU=$(F_CPU)
#---------------- Compiler Options C ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char
CFLAGS += -funsigned-bitfields
CFLAGS += -fpack-struct
CFLAGS += -fshort-enums
CFLAGS += -Wall #warining all
CFLAGS += -Wstrict-prototypes
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
AR = avr-ar rcs
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
REMOVEDIR = rm -rf
COPY = cp
WINSHELL = cmd
⇒ -DF_CPU = 16000000UL은 #define F_CPU 16000000UL과 같다.
→ -DF는 #defined와 같고 F_CPU는 둘다 같으며 ‘=’은 공백으로 나머지 16000000UL과 같다.(UL = unsigned long)
'내장형 하드웨어 > C언어' 카테고리의 다른 글
NASM, MASM 설치, 함수 (실인수, 형식인수, 지역변수) (0) | 2011.04.25 |
---|---|
#define, 함수 인자, 반환(return, printf) (0) | 2011.04.22 |
컴파일 5단계, 분할 컴파일, linux 기본 명령어 복수 (0) | 2011.04.20 |
포인터 - CPU와 BUS MEMORY간 전송과정, void, return, 함수 (0) | 2011.04.19 |
포인터 - 포인터 변수가 가리키는 자료형의 의미, 세그먼테이션(segmentation) (0) | 2011.04.18 |