블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아

카테고리

분류 전체보기 (176)
잡담 (1)
IT 기기-리뷰&뉴스 (7)
리뷰 - 도서 (1)
리뷰 - 영상 (0)
리뷰 - 그림/음악 (1)
내장형 하드웨어 (163)
Total630,101
Today180
Yesterday195
 

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)



Posted by 동화다아아

댓글을 달아 주세요

  1. 2011.04.24 09:25 외부인  댓글주소  수정/삭제  댓글쓰기

    좋은내용
    잘 보고 갑니다

  2. 2016.05.12 21:53 티르  댓글주소  수정/삭제  댓글쓰기

    make main을 쳤을때 (make : *** 타겟 'main'을 만들 규칙이 없음. 멈춤.) 이렇게 뜨는건 어떡게 하나요?

최근에 달린 댓글

최근에 받은 트랙백

글 보관함