1. gcc 옵션
-o :오브젝트 파일명 지정
-I(대문자 아이) : 헤더파일을 검색하는 디렉토리 목록 추가
-L : 라이브러리를 검색하는 디렉토리 목록 추가
-l : 라이브러리 파일을 컴파일 시 링크
-g : 바이너리 파일에 표준 디버깅 정보 포함
-O(0~3) : 컴파일 코드 최적화
-static : 정적 라이브러리 링크
-c : c파일과 같은 object파일 생성
2. Example
<gcc_test1.c>
#include<stdio.h>
#include"head_a.h"
void function1();
void function2();
void main(){
printf("gcc_test1\n");
function1();
function2();
}
<gcc_test2.c>
#include<stdio.h>
#include"head_a.h"
#include"head_b.h"
extern void function1(){
printf("gcc_test2\n");
}
<gcc_test3.c>
#include<stdio.h>
#include"head_c.h"
#include"head_b.h"
extern void function2(){
printf("test3\n");
}
------------------------------------------------------------------------
쉘 명령어
=> 헤더 파일 껍데기만 만들기
touch head_a.h
touch head_b.h
touch head_c.h
=> gcc 컴파일
gcc -c gcc_test1.c -> test1.c와 이름이 같은 object파일 생성
gcc -c gcc_test2.c -> test2.c와 이름이 같은 object파일 생성
gcc -c gcc_test3.c -> test3.c와 이름이 같은 object파일 생성
gcc -o gcc_test gcc_test1.o gcc_test2.o gcc_test3.o
-> 세 개의 object 파일 링크하여 test 실행파일 생성
./test -> test 실행
1. makefile 만들기
1) 기본 형태
대상 : 의존성 정의
명령
2) example source
# vi makefile -> makefile 생성
newTest:gcc_test1.o gcc_test2.o gcc_test3.o
gcc -o newTest gcc_test1.o gcc_test2.o gcc_test3.o
test1.o:gcc_test1.c head_a.h
gcc -c gcc_test1.c
test2.o:gcc_test2.c head_a.h head_b.h
gcc -c gcc_test2.c
test3.o:test3.c head_c.h head_b.h
gcc -c gcc_test3.c
clean: -> 컴파일 과정에서 생긴 불필요한 파일 제거
rm test1.o test2.o test3.o
3) 명령어
make -> makefile make
make clean -> make 후 불필요한 파일 제거
2. makefile에 매크로 활용
1) makefile 작성 시 반복되는 입력을 피하기 위해 사용
2) example source
//매크로 정의
OBJF = hello1.o hello2.o hello3.o
//소스
hello: $(OBJF)
gcc -o hello $(OBJF)
hello1.o: hello1.c a.h
gcc -c hello1.c
hello2.o: hello2.c
gcc -c hello2.c
hello3.o: hello3.c
gcc -c hello3.c
clean:
rm $(OBJF)
3) 명령어
make -> makefile make
make clean -> make 후 불필요한 파일 제거
3. 내부 매크로
1) 내부 매크로 종류
$@ : 현재 목표 파일의 이름
$* : 확장자를 제외한 현재 목표 파일 이름
$< : 현재 필수 조건 파일 중 첫 번째 파일 이름(의존성파일 중에서)
$? : 현재 대상보다 최근에 변경된 필수 조건 파일 이름
$^ : 현재 모든 필수 조건 파일
2) example source
OBJF = hello1.o hello2.o hello3.o
hello: $(OBJF)
gcc -o $@ $^
hello1.o: hello1.c a.h
gcc -c $*.c
hello2.o: hello2.c
gcc -c $*.c
hello3.o: hello3.c
gcc -c $*.c
clean:
rm $(OBJF)
3) 명령어
make -> makefile make
make clean -> make 후 불필요한 파일 제거
4. 접미사 규칙
OBJF = hello1.o hello2.o hello3.o
hello: $(OBJF)
gcc -o $@ $(OBJF)
.c.o:
gcc -c $(CFLAGS) $<
clean:
rm $(OBJF)
3) 명령어
#make CFLAG="-g" -> makefile make
5. make 옵션
-f : makefile나 Makefile 다른 이름의 make파일을 실행
(make 파일명을 사용자 지정)
-n : make가 실행하는 명령을 출력만 하고 실행 안 한다.
-W파일이름 : 이름의 파일이 변경된 것처럼 실행 (ex touch..?)
-s : make가 명령어를 출력 안하고 실행
-r : make의 모든 내장 규칙을 사용할 수 없다.
-d : make 실행시 디버깅 정보도 같이 출력
-k : 한 대상을 구성하는 데 실패해도 다음 대상을 계속 구성
1. gdb 사용방법
1. gdb 사용방법
컴파일시 -g 옵션 설정
#gdb 실행파일명 -디버깅 모드로 변환
(gdb)quit - 디버깅 모드 종료
2. example source
<debug1.c>
#include <stdio.h>
int sum(int i);
void main(){
printf("%d\n", sum(4));
}
int sum(int i){
if(i==1)
return 1;
else
return i+sum(i-1);
}
3. 명령어
gcc -g -o debug1 debug1.c
gdb debug1 -> debug1 디버깅 모드 변환
(gdb)quit -> 디버깅 모드 종료
2. 디버깅 명령어
help : gdb 설명
명령어 첫글자+tab : 첫글자로 시작하는 명령어 자동 검색
list (라인 넘버): 소스출력
list 4,7
list 함수명
run : 디버깅 모드에서 실행
whatis i: i의 데이터 타입
print i:변수 i의 값
set variable i=2 //변수값 할당
break 문장번호 : 해당 라인에 정지점 설정
break 함수이름 : 해당 함수 시작점에 정지점 설정
break 문장번호 또는 함수이름 if조건 : 그 라인에서 if를 만족하면 정지
info break:현재 설정된 정지점 목록 출력
delete 라인넘버: 해당 라인에 설정된 정지점 제거
delete : 정지점 전체 제거
step : 단계별 실행. 함수를 만나면 함수로 들어가 한줄씩 실행
next : 단계별 실행. 함수를 만나면 함수를 건너뜀
[출처] gcc 컴파일 및 옵션|작성자 우동
'Academy I > Tech Academy' 카테고리의 다른 글
Linux gdb 사용법 [II] (0) | 2014.12.22 |
---|---|
Linux make 사용법 [II] (0) | 2014.12.22 |
VirtualBox의 Linux(CentOS)에서 공유폴더 설정 (0) | 2014.12.22 |
Linux gdb 사용법 [I] (0) | 2014.12.19 |
Unix System Programming 10 (0) | 2014.12.16 |
Unix System Programming 9 (0) | 2014.12.16 |
Unix System Programming 8 (0) | 2014.12.16 |
Unix System Programming 7 (0) | 2014.12.16 |