카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/13

gcc 옵션 및 Makefile

1. GCC 옵션 (또는 플래그)

    a. linking(연결) 하지 않고 컴파일: -c
    •  gcc는  linking(연결)하지 않고 소스 파일의 컴파일과 어셈블리를 수행.

    b. 출력 파일 이름 지정:-o <filename>
    •   outpub 결과 파일을 디폴트 값(a.out) 대신 지정 파일이름.

    c. 디버그 정보 포함: -g
    •  생성 된 개체 코드에 디버깅 정보를 포함.
    •  이 정보는 나중에 gdb에서 사용할 수 있다.

    d. 모든 경고 표시: -Wall
    •  잘못 된 코드와 관련 된 대부분의 경고를 표시.

    e. 헤더 파일의 경로를 지정: -I<path>
    •  gcc 컴파일러에게  미리 정의함 include 파일(.h)을 찾을 위치를 알려준다.

    f. 라이브러리 지정: -l<library name=>
    • 특정 라이브러리를 포함 하도록 gcc에 알려준다.

    g. 경고를 오류로 처리: -werror


-예
  gcc hello_world
   a.out

  gcc -c hello_world
   오브젝트 파일 생성

  gcc -o hello_world hello_world
   hello_world 실행 파일 생성

   gcc -g -o hello_world hello_world
    hello_world 실행 파일 디버킹 정보 생성 파일

   gcc hello_world hello_world -i. /include
    헤더파일 추가 컴파일

   gcc hello_world hello_world -lmath
    수학관련 라이브러리 추가 컴파일

   gcc hello_world hello_world -Llib
    라이브러리 추가 컴파일

2. 메이크파일 규칙
2.1 간단한 예
hello: main.o scrren.o hello.o
gcc main.o scrren.o hello.o -o hello

clean:
rm -rf *.o hello

main.o: main.c
gcc -c main.c

scrren.o: scrren.c
gcc -c scrren.c

hello.o: hello.c
gcc -c hello.c


2.2 간단한 예
CC=gcc
CFLAGS=-g -Wall
OBJ:=main.o scrren.o hello.o
EXE=hello

all: $(EXE)

$(EXE): $(OBJ)
$(CC) $(OBJ) -o $(EXE)

hello.o: hello.h hello.c
$(CC) $(CFLAGS) -c hello.c

3. 매크로
 HOME = /home/username
 PROJ = $(HOME)/project_name
 CINC = $(PROJ)/include
 LIB = $(PROJ)/lib
 INCL = I$(PROJ) -I$(CINC) -L$(LIB)

4. 규칙
-예
%.o : %.c
$(CC) $(FLAGS) -c $(SRC)
 빌드 프로세스를 일반화 하는 방법.
 일종의 와일드 카드 표기방식.
 "%"는 와일드 카드를 나타내는 데 사용 됨.
 모든 ".o" 파일에는 동일한 이름의 모든 ".%c" 파일에 대 한 종속성이 있다.

5. Makefiel 예제
 -예
CC = gcc
DIR = /home/username/lib
CFLAGS = -g -I$(DIR) -I. -c
LFLAGS = -g
std: test_analysis.o simuation.o peri.o misc.o opt.o stb.o vect.o
$(CC) $(LFLAGS) -o opt test_analysis.o simuation.o peri.o misc.o opt.o stb.o vect.o

test_analysis.o: analysis.c test_analysys_v1.h $(DIR)/misc.h $(DIR)/opt.h
$(DIR)/vect.h
$(CC) $(CFLAGS) analysis.c
simuation.o: $(DIR)/simulation.c $(DIR)/sim.h
$(CC) $(CFLAGS) $(DIR)/simulation.c

peri.o: $(DIR)/peri.c $(DIR)/peri.h $(DIR)/misc.h $(DIR)/opt.h
$(CC) $(CFLAGS) $(DIR)/peri.c
misc.o: $(DIR)/misc.c $(DIR)/misc.h $(DIR)/opt.h
$(CC) $(CFLAGS) $(DIR)/opt.h
stb.o: stb.c $(DIR)/misc.h $(DIR)/opt.h stb.h
$(CC) $(CFLAGS) stb.c
vect.o: $(DIR)/vect.c $(DIR)/vect.h $(DIR)/opt.h
$(CC) $(CFLAGS) $(DIR)/vect.c

댓글 없음:

댓글 쓰기