Skip to content
Snippets Groups Projects
Commit 63faae19 authored by 이장원's avatar 이장원
Browse files
parents b1e02365 48663250
Branches
No related tags found
No related merge requests found
# printf
`int printf(const char *format, ...)`
printf 함수는 매개변수를 format에 따라서 출력해주는 함수다.
`int fprintf(FILE *stream, const char *format, ...)`
printf 함수는 실행될 때 내부에서 fprintf 함수로 바뀌어서 실행된다.
```
printf("Hello World");
fprintf(stdout, "Hello World");
```
printf 함수가 fprintf 함수로 바뀔 때 stream에 stdout이 들어가게 되고 두 함수는 완전히 같은 역할을 한다.
# stdio.h
standard input output library의 줄임말로 표준 입출력과 관련된 함수, 매크로 등이 포함된 헤더 파일이다.
### stream
* stdin
표준 입력 스트림(키보드)를 참조하는 FILE에 대한 포인터
* stdout
표준 출력 스트림(스크린)를 참조하는 FILE에 대한 포인터
* stderr
표준 오류 스트림(스크린)를 참조하는 FILE에 대한 포인터
# man
`man <command | function | header file | ...>`
manual의 줄임말로 명령어나 함수, 헤더 파일 등에 대한 사용법을 알려주는 명령어다.
# redirection
redirection이란 스트림의 흐름을 바꿔주는 것이다. redirection을 이용해 프로세스의 스트림을 콘솔이 아닌 파일을 사용할 수 있다.
* \>
`file > output`
표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 덮어쓴다.
```
$ ./test > output_data
```
* \>>
`file >> output`
표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙인다.
```
$ ./test >> output_data
```
* <
`file < input`
파일로부터 표준 입력을 받도록 redirection한다.
```
$ ./test < intput_data
```
\ No newline at end of file
# C Preprocessor
전처리기(preprocessor)는 전처리(.c -> .i)를 해주는 도구이다. 전처리는 .h에 있는 텍스트들을 .c에 치환(붙여넣기)해주는 과정이다. C Preprocessor는 CPP로 줄여쓰기도 한다.
### Including files
* `#include <filename>`
표준 헤더 파일을 include하는 방식으로 표준 라이브러리들이 모여있는 폴더에서 헤더 파일을 검색해서 include한다.
* `#include "filename"`
사용자 헤더 파일을 include하는 방식으로 현재 소스 파일이 위치한 폴더에서 헤더 파일을 검색해서 include한다.
### Conditional compilation
#if, #ifdef, #ifndef, #else, #elif, #endif는 조건부 컴파일을 할 수 있게 한다. 조건이 맞지 않으면 그 부분이 컴파일에서 제외된다. 즉, 소스 자체가 없는 효과가 있다.
#error을 사용하여 컴파일을 실패하게 할 수도 있다.
### Macro definition
특정 숫자, 함수, 프로그램 블록을 다른 형태로 변환 지정한다. 변환은 원래 한 줄만 가능하지만 \를 사용하여 여러 줄을 연결할 수 있다.
* `#define <identifier> <replacement token list>`
대상변환형(Object-like macros)이라고 하며 identifier를 replacement token list로 변환한다.
* `#define <identifier>(<parameter list>) <replacement token list>`
유사함수변환형(Function-like macros)이라고 하며 identifier와 parameter list를 replacement token list로 변환한다.
* `#undef <identifier>`
#undef를 사용해 정의된 매크로를 무효화할 수도 있다.
```c
#define f(a) a*a
b = f(20+13) // b = 293
```
전처리는 단순히 텍스트를 치환하는 것이기 때문에 위의 코드를 실행할 시
```c
b = 20 + 13 * 20 + 13
```
이렇게 치환되므로 괄호를 최대한 많이 써주는 것이 좋다.
```c
#define f(a) ((a)*(a))
b = f(20+13) // b = 1089
```
### etc.
* #pragma once
`#pragma once`를 사용하여 여러번 include하는 것을 방지할 수 있다.
* Token stringification
`#define <identifier>(<parameter>) #parameter`
#연산자는 token을 문자열 상수로 변환한다.
* Token concatenation
`#define <identifier>(<parameter>) parameter##string`
##연산자는 두 token을 하나로 연결하여 변환한다.
* Debuging macros
디버깅을 하면서 어느 부분에서 에러가 났는 지 알려준다.
* __FILE\_\_
에러가 발생한 파일 경로
* __LINE\_\_
에러가 발생한 라인
* __FUNCTION\_\_
에러가 발생한 함수
# Multiple file compile
* func.h
```
#define SQAURE(a) ((a)*(a))
extern int func(int a);
```
* func.c
```
#include "func.h"
int func(int a)
{
return(a * 10);
}
```
* main.c
```
#include <stdio.h>
#include "func.h"
int main()
{
printf("func(100): %d SQUARE(10): %d\n", func(100), SQUARE(10));
return 0;
}
```
보통 이런 식으로 코드를 작성하고
```
$ gcc main.c func.c
```
이렇게 컴파일, 링크하여 실행 파일을 실행한다.
\ No newline at end of file
# 컴파일러 VS 인터프리터 # 컴파일러 vs 인터프리터
컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다. 컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.
...@@ -30,26 +30,26 @@ ...@@ -30,26 +30,26 @@
# GCC 명령어 옵션 # GCC 명령어 옵션
* -o * -o
지정한 파일명에 출력 지정한 파일명에 출력한다.
``` ```
$ gcc -o 00.option-o 00.option-o.c $ gcc -o 00.option-o 00.option-o.c
``` ```
![o](../Images/o.png) ![o](../Images/o.png)
* -E * -E
전처리하여 전처리된 소스 파일(.i)을 생성 전처리하여 전처리된 소스 파일(.i)을 생성한다.
``` ```
$ gcc -E 01.option-E.c $ gcc -E 01.option-E.c
``` ```
stdout에 결과를 출력 -E 옵션만 사용하면 전처리된 결과를 stdout에 보여주기만 한다.
``` ```
$ gcc -E 01.option-E.c > 01.option-E.i $ gcc -E 01.option-E.c > 01.option-E.i
``` ```
리디렉션으로 .i 생성 redirection으로 .i 생성한다.
![E](../Images/E.png) ![E](../Images/E.png)
* -S * -S
컴파일하여 어셈블리 파일(.s)을 생성 컴파일하여 어셈블리 파일(.s)을 생성한다.
``` ```
$ gcc -S 02.option-S.i $ gcc -S 02.option-S.i
``` ```
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
![S](../Images/S.png) ![S](../Images/S.png)
* -c * -c
어셈블하여 목적 파일(.o)을 생성 어셈블하여 목적 파일(.o)을 생성한다.
``` ```
$ gcc -c 03.option-c.s $ gcc -c 03.option-c.s
``` ```
...@@ -65,14 +65,14 @@ ...@@ -65,14 +65,14 @@
![c](../Images/c.png) ![c](../Images/c.png)
* -D * -D
외부에서 매크로를 define 외부에서 매크로를 define한다.
``` ```
$ gcc -DNO 05.option-D.c $ gcc -DNO 05.option-D.c
``` ```
![D](../Images/D.png) ![D](../Images/D.png)
* -g * -g
운영체제 고유의 형식으로 디버깅 정보를 만 운영체제 고유의 형식으로 디버깅 정보를 만든다.
``` ```
$ gcc -g 06.option-g.c $ gcc -g 06.option-g.c
``` ```
...@@ -82,14 +82,14 @@ ...@@ -82,14 +82,14 @@
on Git Bash on Git Bash
* -Wall * -Wall
GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력 GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력한다.
``` ```
$ gcc -Wall 07.option-Wall.c $ gcc -Wall 07.option-Wall.c
``` ```
![Wall](../Images/Wall.png) ![Wall](../Images/Wall.png)
* -I(upper case of i) * -I(upper case of i)
헤더 파일을 검색할 디렉터리를 추가 헤더 파일을 검색할 디렉터리를 추가한다.
``` ```
$ gcc -ImyInclude 09.option-I.c $ gcc -ImyInclude 09.option-I.c
``` ```
......
...@@ -4,17 +4,11 @@ OBJS=main.o func.o ...@@ -4,17 +4,11 @@ OBJS=main.o func.o
test: $(OBJS) test: $(OBJS)
$(CC) -o $@ $^ $(CC) -o $@ $^
id: main.o id_func.o
$(CC) -o test $(OBJS)
main.o: main.c main.o: main.c
$(CC) -c main.c $(CC) -c $^
func.o: func.c func.o: func.c
$(CC) -c func.c $(CC) $(CFLAGS) -c $^
id_func.o: func.c
$(CC) -DPRINT_ID -c func.c
clean: clean:
rm $(OBJS) test rm $(OBJS) test
# Make
### make란?
* 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일 되어야 하는지를 자동적으로 판단해서 필
요한 커맨드를 사용해서 그들을 재 컴파일 시킴
* 많은 프로그램 모듈들로 구성된 대규모 프로그램을 효율적으로 유지하고, 일관성 있게 관리
하도록 도와주는 도구
* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
* 선결조건(prerequisites)으로부터 대상(target)을 만들어 내는 다목적 프로그램
### make의 동작
* make는 여러 파일들 간의 의존성을 저장하고 수정된 파일에 연관된 소스 파일들만을 재
컴파일 하도록 해줌
* 수정한 소스 파일들만 자동적으로 재 컴파일하고 링크하도록 함
* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
* make 유틸리티는 이전에 make 명령을 실행했던 시점 이후에 이뤄진 프로젝트 작업들에
대해서만 갱신 작업을 수행함
### make의 필요성
* 프로그램 개발 및 유지보수의 편리성을 지원
* 명령어의 배치 처리 가능, 자주 쓰는 명령어를 자동화할 수 있음
* 입력파일 변경 시 자동적으로 결과 파일이 바뀌기를 원할 때
# Makefile
`대상(target) : 의존하는 파일들(prerequisites)`
`<tab> 명령어(command)`
`<tab> 명령어(command)`
* clean
주로 make하는 과정에서 생긴 .o 파일이나 실행 파일을 삭제하는 역할
* dep
gccmakedep 명령어를 통해 의존 관계를 자동으로 생성한다.
`<identifier> = <files>`
identifier를 통해 여러 개의 파일들을 간단하게 부를 수 있는 매크로
코드 상에서 쓸 때는 `$(<identifier>)`로 써야 한다.
* 내장매크로(Internal macro)
| 매크로 | 의미 |
|:--:|--|
| $@ | 현재의 목표 (Target) 파일명 |
| $? | 현재의 목표파일(Target)보다 더 최근에 갱신된 의존 파일 명단 |
| $* | 현재의 목표파일(Target)보다 더 최근에 갱신된 확장자를 제외한 의존 파일 명단 |
| $< | 의존 파일(전제 조건) 중 첫번째 파일명 |
| $^ | 현재 모든 의존 파일들의 명단 |
| $+ | '$^'과 같지만, 두 번 이상 나열된 전제 조건은 makefile에 나열된 순서대로 복제됨 |
| $% | 타깃이 라이브러리 모듈일 때 멤버에 대응되는 파일명 |
* 내장매크로(Pre-defined macro)
| 매크로 | 의미 |
|:--:|--|
| AR | Archive-maintaining program; default ‘ar’. |
| ARFLAGS | ar 명령어의 옵션 설정 |
| AS | Program for compiling assembly files; default ‘as’. |
| ASFLAGS | as 명령어의 옵션 설정 |
| CC | Program for compiling C programs; default ‘cc’. |
| CFLAGS | cc 명령어의 옵션 설정 |
| CXX | Program for compiling C++ programs; default ‘g++’. |
| CXXFLAGS | g++ 명령어의 옵션 설정 |
| LDFLAGS | ld 명령어의 옵션 설정 |
* 확장자 규칙 (Suffix Rules)
확장자 규칙은 미리 정의해 놓은 일반화한 기술 파일 항목을 가리킴
```
.SUFFIXES : .o .c .s
.c.o :
$(CC) $(CFLAGS) -c $<
.s.o :
$(AS) $(ASFLAGS) -o $@ $<
```
\ No newline at end of file
# battle_c # battle_c
## Jangwon Lee - Team 1 ### Jangwon Lee - Team 3
실전코딩2 실습 실전코딩2
## printf # printf
### stdio.h `int printf(const char *format, ...)`
printf 함수는 매개변수를 format에 따라서 출력해주는 함수다.
* stderr, stdout, stdin에 대해서 배움 `int fprintf(FILE *stream, const char *format, ...)`
printf 함수는 실행될 때 내부에서 fprintf 함수로 바뀌어서 실행된다.
# 컴파일러 VS 인터프리터 ```
printf("Hello World");
fprintf(stdout, "Hello World");
```
printf 함수가 fprintf 함수로 바뀔 때 stream에 stdout이 들어가게 되고 두 함수는 완전히 같은 역할을 한다.
# stdio.h
standard input output library의 줄임말로 표준 입출력과 관련된 함수, 매크로 등이 포함된 헤더 파일이다.
### stream
* stdin
표준 입력 스트림(키보드)를 참조하는 FILE에 대한 포인터
* stdout
표준 출력 스트림(스크린)를 참조하는 FILE에 대한 포인터
* stderr
표준 오류 스트림(스크린)를 참조하는 FILE에 대한 포인터
# man
`man <command | function | header file | ...>`
manual의 줄임말로 명령어나 함수, 헤더 파일 등에 대한 사용법을 알려주는 명령어다.
# redirection
redirection이란 스트림의 흐름을 바꿔주는 것이다. redirection을 이용해 프로세스의 스트림을 콘솔이 아닌 파일을 사용할 수 있다.
* \>
`file > output`
표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 덮어쓴다.
```
$ ./test > output_data
```
* \>>
`file >> output`
표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙인다.
```
$ ./test >> output_data
```
* <
`file < input`
파일로부터 표준 입력을 받도록 redirection한다.
```
$ ./test < intput_data
```
# C Preprocessor
전처리기(preprocessor)는 전처리(.c -> .i)를 해주는 도구이다. 전처리는 .h에 있는 텍스트들을 .c에 치환(붙여넣기)해주는 과정이다. C Preprocessor는 CPP로 줄여쓰기도 한다.
### Including files
* `#include <filename>`
표준 헤더 파일을 include하는 방식으로 표준 라이브러리들이 모여있는 폴더에서 헤더 파일을 검색해서 include한다.
* `#include "filename"`
사용자 헤더 파일을 include하는 방식으로 현재 소스 파일이 위치한 폴더에서 헤더 파일을 검색해서 include한다.
### Conditional compilation
#if, #ifdef, #ifndef, #else, #elif, #endif는 조건부 컴파일을 할 수 있게 한다. 조건이 맞지 않으면 그 부분이 컴파일에서 제외된다. 즉, 소스 자체가 없는 효과가 있다.
#error을 사용하여 컴파일을 실패하게 할 수도 있다.
### Macro definition
특정 숫자, 함수, 프로그램 블록을 다른 형태로 변환 지정한다. 변환은 원래 한 줄만 가능하지만 \를 사용하여 여러 줄을 연결할 수 있다.
* `#define <identifier> <replacement token list>`
대상변환형(Object-like macros)이라고 하며 identifier를 replacement token list로 변환한다.
* `#define <identifier>(<parameter list>) <replacement token list>`
유사함수변환형(Function-like macros)이라고 하며 identifier와 parameter list를 replacement token list로 변환한다.
* `#undef <identifier>`
#undef를 사용해 정의된 매크로를 무효화할 수도 있다.
```c
#define f(a) a*a
b = f(20+13) // b = 293
```
전처리는 단순히 텍스트를 치환하는 것이기 때문에 위의 코드를 실행할 시
```c
b = 20 + 13 * 20 + 13
```
이렇게 치환되므로 괄호를 최대한 많이 써주는 것이 좋다.
```c
#define f(a) ((a)*(a))
b = f(20+13) // b = 1089
```
### etc.
* #pragma once
`#pragma once`를 사용하여 여러번 include하는 것을 방지할 수 있다.
* Token stringification
`#define <identifier>(<parameter>) #parameter`
#연산자는 token을 문자열 상수로 변환한다.
* Token concatenation
`#define <identifier>(<parameter>) parameter##string`
##연산자는 두 token을 하나로 연결하여 변환한다.
* Debuging macros
디버깅을 하면서 어느 부분에서 에러가 났는 지 알려준다.
* __FILE\_\_
에러가 발생한 파일 경로
* __LINE\_\_
에러가 발생한 라인
* __FUNCTION\_\_
에러가 발생한 함수
# Multiple file compile
* func.h
```
#define SQAURE(a) ((a)*(a))
extern int func(int a);
```
* func.c
```
#include "func.h"
int func(int a)
{
return(a * 10);
}
```
* main.c
```
#include <stdio.h>
#include "func.h"
int main()
{
printf("func(100): %d SQUARE(10): %d\n", func(100), SQUARE(10));
return 0;
}
```
보통 이런 식으로 코드를 작성하고
```
$ gcc main.c func.c
```
이렇게 컴파일, 링크하여 실행 파일을 실행한다.
# 컴파일러 vs 인터프리터
컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다. 컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.
...@@ -42,26 +199,26 @@ ...@@ -42,26 +199,26 @@
# GCC 명령어 옵션 # GCC 명령어 옵션
* -o * -o
지정한 파일명에 출력 지정한 파일명에 출력한다
``` ```
$ gcc -o 00.option-o 00.option-o.c $ gcc -o 00.option-o 00.option-o.c
``` ```
![o](./Images/o.png) ![o](./Images/o.png)
* -E * -E
전처리하여 전처리된 소스 파일(.i)을 생성 전처리하여 전처리된 소스 파일(.i)을 생성한다
``` ```
$ gcc -E 01.option-E.c $ gcc -E 01.option-E.c
``` ```
stdout에 결과를 출력 -E 옵션만 사용하면 전처리된 결과를 stdout에 보여주기만 한다.
``` ```
$ gcc -E 01.option-E.c > 01.option-E.i $ gcc -E 01.option-E.c > 01.option-E.i
``` ```
리디렉션으로 .i 생성 redirection으로 .i 생성한다.
![E](./Images/E.png) ![E](./Images/E.png)
* -S * -S
컴파일하여 어셈블리 파일(.s)을 생성 컴파일하여 어셈블리 파일(.s)을 생성한다
``` ```
$ gcc -S 02.option-S.i $ gcc -S 02.option-S.i
``` ```
...@@ -69,7 +226,7 @@ ...@@ -69,7 +226,7 @@
![S](./Images/S.png) ![S](./Images/S.png)
* -c * -c
어셈블하여 목적 파일(.o)을 생성 어셈블하여 목적 파일(.o)을 생성한다
``` ```
$ gcc -c 03.option-c.s $ gcc -c 03.option-c.s
``` ```
...@@ -77,14 +234,14 @@ ...@@ -77,14 +234,14 @@
![c](./Images/c.png) ![c](./Images/c.png)
* -D * -D
외부에서 매크로를 define 외부에서 매크로를 define한다
``` ```
$ gcc -DNO 05.option-D.c $ gcc -DNO 05.option-D.c
``` ```
![D](./Images/D.png) ![D](./Images/D.png)
* -g * -g
운영체제 고유의 형식으로 디버깅 정보를 만 운영체제 고유의 형식으로 디버깅 정보를 만든다
``` ```
$ gcc -g 06.option-g.c $ gcc -g 06.option-g.c
``` ```
...@@ -94,15 +251,95 @@ ...@@ -94,15 +251,95 @@
on Git Bash on Git Bash
* -Wall * -Wall
GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력 GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력한다
``` ```
$ gcc -Wall 07.option-Wall.c $ gcc -Wall 07.option-Wall.c
``` ```
![Wall](./Images/Wall.png) ![Wall](./Images/Wall.png)
* -I(upper case of i) * -I(upper case of i)
헤더 파일을 검색할 디렉터리를 추가 헤더 파일을 검색할 디렉터리를 추가한다
``` ```
$ gcc -ImyInclude 09.option-I.c $ gcc -ImyInclude 09.option-I.c
``` ```
![I](./Images/I.png) ![I](./Images/I.png)
\ No newline at end of file
# Make
### make란?
* 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일 되어야 하는지를 자동적으로 판단해서 필
요한 커맨드를 사용해서 그들을 재 컴파일 시킴
* 많은 프로그램 모듈들로 구성된 대규모 프로그램을 효율적으로 유지하고, 일관성 있게 관리
하도록 도와주는 도구
* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
* 선결조건(prerequisites)으로부터 대상(target)을 만들어 내는 다목적 프로그램
### make의 동작
* make는 여러 파일들 간의 의존성을 저장하고 수정된 파일에 연관된 소스 파일들만을 재
컴파일 하도록 해줌
* 수정한 소스 파일들만 자동적으로 재 컴파일하고 링크하도록 함
* 소스 수정 시 유관 파일들을 재컴파일 & 링크하는 반복적인 작업을 간단하게 처리함
* make 유틸리티는 이전에 make 명령을 실행했던 시점 이후에 이뤄진 프로젝트 작업들에
대해서만 갱신 작업을 수행함
### make의 필요성
* 프로그램 개발 및 유지보수의 편리성을 지원
* 명령어의 배치 처리 가능, 자주 쓰는 명령어를 자동화할 수 있음
* 입력파일 변경 시 자동적으로 결과 파일이 바뀌기를 원할 때
# Makefile
`대상(target) : 의존하는 파일들(prerequisites)`
`<tab> 명령어(command)`
`<tab> 명령어(command)`
* clean
주로 make하는 과정에서 생긴 .o 파일이나 실행 파일을 삭제하는 역할
* dep
gccmakedep 명령어를 통해 의존 관계를 자동으로 생성한다.
`<identifier> = <files>`
identifier를 통해 여러 개의 파일들을 간단하게 부를 수 있는 매크로
코드 상에서 쓸 때는 `$(<identifier>)`로 써야 한다.
* 내장매크로(Internal macro)
| 매크로 | 의미 |
|:--:|--|
| $@ | 현재의 목표 (Target) 파일명 |
| $? | 현재의 목표파일(Target)보다 더 최근에 갱신된 의존 파일 명단 |
| $* | 현재의 목표파일(Target)보다 더 최근에 갱신된 확장자를 제외한 의존 파일 명단 |
| $< | 의존 파일(전제 조건) 중 첫번째 파일명 |
| $^ | 현재 모든 의존 파일들의 명단 |
| $+ | '$^'과 같지만, 두 번 이상 나열된 전제 조건은 makefile에 나열된 순서대로 복제됨 |
| $% | 타깃이 라이브러리 모듈일 때 멤버에 대응되는 파일명 |
* 내장매크로(Pre-defined macro)
| 매크로 | 의미 |
|:--:|--|
| AR | Archive-maintaining program; default ‘ar’. |
| ARFLAGS | ar 명령어의 옵션 설정 |
| AS | Program for compiling assembly files; default ‘as’. |
| ASFLAGS | as 명령어의 옵션 설정 |
| CC | Program for compiling C programs; default ‘cc’. |
| CFLAGS | cc 명령어의 옵션 설정 |
| CXX | Program for compiling C++ programs; default ‘g++’. |
| CXXFLAGS | g++ 명령어의 옵션 설정 |
| LDFLAGS | ld 명령어의 옵션 설정 |
* 확장자 규칙 (Suffix Rules)
확장자 규칙은 미리 정의해 놓은 일반화한 기술 파일 항목을 가리킴
```
.SUFFIXES : .o .c .s
.c.o :
$(CC) $(CFLAGS) -c $<
.s.o :
$(AS) $(ASFLAGS) -o $@ $<
```
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment