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

    카테고리

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

     1. make란?


    여러 파일로 구성된 프로그램이 있을 경우 하나의 소스파일을 수정하면 모든 파일을 다시 컴파일하고 링크해야 한다.

    결국 이러한 수고를 편하게 하기 위해서 수정된 파일만 자동으로 알아내 컴파일 하고 수정하지 않은 파일에 대해서는 기존 오브젝트 파일을 그대로 이용하게 해주는 툴이다.


    2. makefile


    대상 : 대상에 의존되는 파일1 2 3 ...

    탭간격 명령

    test : test.c

    gcc test.c -o test

    → 각 요소를 구분하는데 있어 컴마 같은건 사용하지 않고 공백으로 한다.

    → 명령을 시작하기 전에 항상 TAB을 넣는다.

    → make파일 내에서 항목의 순서는 중요치 않다.


    3.몇가지 문법 규칙

    매크로 : makefile을 작성하다 보면 파일이름을 여러 번 써야 하는 경우가 있다. 이런 경우에 매크로를 사용하면 편리하고 명령을 단순화 시킬 수 있다.


    MACRO_NAME = VALUE

    매크고 사용시 대소문자 모두 가능 (보통 대문자로 씀)

    makefile 상단에 정의한다.

    OBJF = test1.o test2.o test3.o

    test : $(OBJF)

    gcc -o test $(OBJF)

    .

    .

    .

    clean:

    rm $(OBJF)


    내부 매크로 설명

    $@ : 현재 목표 파일의 이름

    $* : 확장자를 제외한 현재 목표파일의 이름

    $< : 현재 필수 조건 파일 중 첫번째 파일 이름

    $? : 현재 대상보다 최근에 변경된 필수 조건 파일 이름

    $^ : 현재 모든 필수 조건 파일들


    매크로 치환

    $(MACRO_NAME:old=new)

    OBJF = test1.o test2.o test3.o

    SRCS = $(OBJF:.o=.c) → OBJF의 확장자가 .o에서 .c로 바뀌게 되어 SRCS에 저장. 결국 SRCS는 test1.c test2.c test3.c를 의미하게 됨


    ex1) main.c hello.c 가 있다고 가정하고 makefile을 만드는 과정

     → vi makefile

     →     test : main.o hello.o

                    gcc -o test main.o hello.o

            main.o : main.c

                    gcc -c main.c

            hello.o : hello.c

                    gcc -c hello.c

     → 저장 후 나와서 make 명령을 실행 후 ./test를 입력하면 실행.


    ex2) main.o read.o write.o라는 것을 OBJECTS 라는 매크로로 바꾸어 사용하는 과정

     →     OBJECTS = main.o hello.o

            test : $(OBJECTS)

                    gcc -o test $(OBJECTS)

            main.o : main.c

                    gcc - c main.c

            hello.o : hello.c

                    gcc - o hello.c

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


    ex3)

     →     OBJECTS = main.o hello.o

            test : $(OBJECTS)

                    gcc -o test $(OBJECTS)

            main.o : main.c

                    gcc - c main.c

            hello.o : hello.c

                    gcc - o hello.c

            clean :

                            rm $(OBECTS)


     →  % make clean

            rm main.o read.o write.o <- OK



    ※ make all 실행시 all : ??? 로 설정된 부분이 실행된다.

    ※ make clean : 실행파일, 모든 오브젝트파일이 삭제된다.


    - 미리 정해져 있는 매크로(Pre-defined macro)

     → 'make -p' 라고 입력해 보면 make에서 미리 세팅되어 있던 모든 값들(매크로, 환경 변수(environment) 등등)이 스크롤 된다. 그중에서 미리 정해져 있는 매크로의 일부를 나열해 보면


            ASFLAGS = <- as 명령어의 옵션 세팅

            AS = as

            CFLAGS = <- gcc 의 옵션 세팅

            CC = cc (= gcc)

            CPPFLAGS = <- g++ 의 옵션

            CXX = g++

            LDLFAGS = <- ld 의 옵션 세팅

            LD = ld

            LFLAGS = <- lex 의 옵션 세팅

            LEX = lex

            YFLAGS = <- yacc 의 옵션 세팅

            YACC = yacc

            MAKE_COMMAND = make


    ex4)

            OBJECTS = main.o hello.o

            SRCS = main.c hello.c <- 없어도 됨


            CC = gcc <- gcc 로 세팅

            CFLAGS = -g -c <- gcc 의 옵션에 -g 추가

            

            TARGET = test <- 결과 파일을 test 라고 지정

            

            $(TARGET) : $(OBJECTS)

                    $(CC) -o $(TARGET) $(OBJECTS)

            

            clean :

                    rm -rf $(OBJECTS) $(TARGET) core

            

            main.o : main.c

            hello.o : hello.c

    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함