GCC and Make

진주찬·2023년 6월 13일
0

Linux

목록 보기
10/11

GCC

= "GNU C Compiler" -> "GNU Compiler Collection"

GCC로 C코드 다루기

.c : C소스 파일 -> 전처리(Preprocessing), 컴파일(Compile), 어셈블리(Assembly), 링킹(Linking)
.s : 어셈블리 파일 -> 어셈블리, 링킹
.S : 어셈블리 파일 -> 전처리, 어셈블리, 링킹
.o : 오브젝트 파일 -> 링킹
.a .so : 컴파일된 라이브러리 파일 -> 링킹

gcc 옵션

-c : 소스파일을 오브젝트 파일로 컴파일
-o filename : 출력 바이너리 파일 이름을 설정(기본값 : a.out)
-I dir : 헤더 파일 검색을 위한 디렉토리 추가
-S : 소스파일을 어셈블리 파일로 컴파일
-E : 소스 파일을 전처리
-L dir : 라이브러리 검색을 위한 디렉토리 추가
-g : 바이너리 파일에 표준 디버깅 정보 추가
-ggdb : 바이너리 파일에 gdb 디버깅 정보 추가
-O : 컴파일 최적화
-O level : 최적화 수준 설정(1~3)
-D Foo=BAR : BAR값으로 전처리된 매크로 FOO를 디파일 한다.
-llib : 링킹하는 동안 라이브러리 링킹
-Wall : 잘못된 코드와 관련된 대부분의 경고 표시

  • 라이브러리와 헤더파일 사용
    -사용법 : ar csr 라이브러리이름 오브젝트파일

Make

  • 별도의 컴파일 방법 제공
  • 프로젝트 파일간의 종속성 설명

makefiles 사용법

  • 이름 : "Makefile" 또는 "makefile"이 표준이다.
  • 실행
    - make
    • make -f filename : 파일이름이 "Makefile" 또는 "makefile"이 아닌 경우
    • make target_name : 첫번째가 아닌 대상을 만들려는 경우

makefile 요소

  • 규칙 : 묵시적, 명시적
  • 변수(매크로)
  • 지시문(조건부)
  • # : 줄 끝까지의 모든 것을 주석처리한다.
  • \ : 명령줄 두 줄에서 분리

자동 변수

: 자동변수는 특정 부분을 참조하는데 사용된다.

eval.p : eval.c eval.h
	g++ -c eval.c

@규칙의대상이름(eval.o)@ - 규칙의 대상 이름(eval.o)* - 확장자가 없는 파일 이름(eval)
<첫번째종속성(eval.c)의이름< - 첫 번째 종속성(eval.c)의 이름^ - 모든 종속성의 이름(eval.c eval.h)
$? - 대상보다 최신인 모든 종속성의 이름

Implicit rules(암시적 규칙)

: 한 유형의 파일을 다른 유형에서 만드는 표준 방법
a.c 파일, a.p파일 등 .o 파일을 만드는데 많은 규칙이 있다.

  • Phony targets : 종속성이 없는 타겟, 실행하려는 명령의 이름으로만 사용된다.

  • 조건문(지시문)
    if, ifeq, ifneq, ifdef, ifndef
    이것들은 endif 로 끝내야한다. elif 및 else 사용가능

0개의 댓글