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
댓글 없음:
댓글 쓰기