'분류 전체보기'에 해당되는 글 84건

  1. 2010.05.30 컴파일러 옵션
  2. 2010.05.30 make 활용 강좌 - 3강
  3. 2010.05.30 make 활용 강좌 - 2강
  4. 2010.05.30 make 활용 강좌 - 1강

컴파일러 옵션

|
http://fussion.egloos.com/9674149 동적라이브러리 설명 상세히

MS Visual Studio Compiler

명령어 : cl
>cl test.c
>dir
test.c
test.exe


옵션 :

/P : Preprocessing 후 .i 파일만 생성
>cl /P test.c
>dir
test.c
test.i


/Fa : Compiling 후 .asm 파일, .obj 파일, .exe 파일 생성
>cl /Fa test.c
>dir
test.asm
test.c
test.exe
test.obj


/c : Assembling 후 .obj 파일만 생성
>cl /c test.c
>dir
test.c
test.obj


GCC (GNU Compiler Colletion)

명령어 : gcc
$ gcc test.c
$ ls
a.out  test.c


옵션 :

-E -o 파일명 : Preprocessing 후 .i 파일만 생성 (-o 파일명을 하지 않으면 전처리 내용을 화면에 출력함)
$ gcc -E -o test.i test.c
$ ls
test.c  test.i


-S : Compiling 후 .s 파일만 생성
$ gcc -S test.c
$ ls
test.c  test.s


-c : Assembling 후 .o 파일만 생성
$ gcc -c test.c
$ ls
test.c  test.o


그 외 옵션 :

--save-temps : .i, .s, .o, 실행 파일을 모두 생성

-g : Debugging 정보까지 포함시켜 컴파일

-l : Library 파일이름을 지정 (소문자 엘)

-L : Library가 위치한 디렉토리를 지정

-Wall : 모든 경고 메시지 출력



GCC는 GNU Compiler Collection 의 준 말이지요.  전에는 C Compiler 였으나, C++이나 자바, 포트란 등을 모두 컴파일 할 수 있을 정도로 커져서 컴파일러 콜렉션이라고 바뀌었습니다.

 

GCC는 컴파일러입니다.  컴파일러의 패스를 보면 쉽게 쉽게 이해 됩니다.

 

전처리기 -> 컴파일러 -> 어셈블러 -> 링커

 

이 과정으로 되는 것을 GCC 하나로 모두 진행 시켜서 소스 파일을 실행 파일로 생성 시켜 줍니다.

 

전처리기는 cpp(C pre processor) 이며, 소스 파일의 주석 제거 및 define을 치환하는 기능 등을 합니다.

그다음은 cc 이며, C Compiler 입니다.  이것은 전처리기를 거친 소스 파일을 어셈 파일로 변환합니다.

그다음은 as 이며, assmeber 입니다.  이것은 에셈파일을 오브젝트 파일로 변환해주십니다.

마지막으로 ld 이며, linker 입니다.  이것은 오브젝트 파일들을 묶어서 실행 파일로 변환해 줍니다.

 

GCC는 옵션이 아주 많이 있지만, 자주 쓰이는 옵션은 제한 되어 있습니다.

 

--help : 간단한 옵션을 출력해줍니다.

--version : gcc의 버젼을 출력해 줍니다.

 

-o : 출력 파일명을 지정할 때 사용합니다.

-c : 링킹 과정을 진행 하지 않고 .o 파일인 오브젝트 파일까지만 생성 하게 됩니다.

-S : 어셈블러까지 진행 하지 않고, 컴파일러까지의 출력은 .S 어셈블러 파일을 생성하게 됩니다.

-O1 ~ -O3 : 최적화 수준을 지정합니다. 숫자가 클수록 높은 수준의 최적화를 하게 됩니다.

-g : 디버깅을 위한 정보를 컴파일 하면서 생성하게 됩니다.

-D : define 을 할수 있는 옵션입니다.

-l (엘) : 라이브러리 이름을 지정합니다.

 -L : 추가 라이브러리 디렉토리를 지정합니다.

-W : 모든 에러 메시지 출력

-w : 모든 에러 메시지를 출력 하지 않음

-I(아이) : 추가 헤더 파일이 있는 디렉토리를 지정합니다.


많이 사용되는 옵션을 축약했습니다.
외의 자세한 사항은 매뉴얼 명령어를 참고하시면 됩니다.
터미널을 여신 후 입력창에  'man gcc'를 입력합니다.

'Compile 강좌' 카테고리의 다른 글

라이브러리  (0) 2010.06.26
[컴파일 강좌] 2강 - C++ 분할 컴파일  (0) 2010.06.22
[컴파일 강좌] 1강 - C 분할 컴파일  (0) 2010.06.21
And

make 활용 강좌 - 3강

|
make 활용 강좌 - 3강

2. 예제

먼저 gcc의 옵션과 삭제 명령에 대해 알아보자.

$ gcc -o test test.c
test.c를 컴파일(프리프로세싱-컴파일링 -어셈블링-링킹)하여 test라는 실행 파일을 만든다.

$ gcc -c test.c
test.c를 (프리프로세싱-컴파일링-어셈블링)만 하여 test.o라는 오브젝트 파일을 만든다.

$ rm test test.o
test 파일과 test.o 파일을 삭제한다.

#Makefile 작성 시 주의 사항 : gcc 앞에 tab이 있어야 한다.


예제1) test 실행파일 생성하기
$ vi Makefile
test : test.c
  gcc -o test test.c
:wq

$ make test
설명1) 
line1 : test 파일을 생성하려면 test.c 파일이 필요
line2 : line1의 조건이 만족되면 실행

실행 순서
  (1) 현재 디렉토리에 Makefile이 있는지 확인
  (2) 있으면 test 파일을 만드는 조건이 있는지 확인 --> test : test.c 발견
  (3) test.c라는 파일이 있는지 확인
  (4) 있으면 gcc -o test test.c 실행
  (5) 현재 디렉토리에 Makefile, test, test.c라는 파일이 존재함


예제2) test.o 파일만 생성하기
$ vi Makefile
test.o : test.c
  gcc -c test.c
:wq

$ make test.o


예제3) test.o 파일과 실행파일 모두 생성하기
$ vi Makefile
test : test.o
  gcc -o test test.o
test.o : test.c
  gcc -c test.c
:wq

$ make test
설명3)
line1 : test 파일을 생성하려면 test.o 파일이 필요
line2 : line1의 조건이 만족되면 실행
line3 : test.o 파일을 생성하려면 test.c 파일이 필요
line4 : line3의 조건이 만족되면 실행

실행 순서
  (1) 현재 디렉토리에 Makefile이 있는지 확인
  (2) 있으면 test 파일을 만드는 조건이 있는지 확인 --> test : test.o 발견
  (3) test.o 파일이 있는지 확인 --> 없음
  (4) test.o 파일이 없으므로 test.o 파일을 만드는 조건이 있는지 확인 --> test.o : test.c 발견
  (5) test.c 파일이 있는지 확인 --> 있음
  (6) gcc -c test.c 실행 --> test.o 파일 생성
  (7) test.o 파일이 생성되었으므로 line1의 조건을 만족함
  (8) gcc -o test test.c 실행 --> test 파일 생성
  (9) 현재 디렉토리에 Makefile, test, test.o, test.c 파일이 존재함


예제4) test, test.o 파일 삭제하기
vi Makefile
clean :
  rm test test.o
:wq

$ make clean
설명4) target file이 있어야 할 곳에 clean이라는 것이 있다. 그리고 dependency file도 없다.
clean이 파일이 아님에도 에러가 나지 않고 아래의 삭제 명령도 잘 실행된다.
그 이유는 파일 이름이 와야할 자리에 레이블도 올 수 있게끔 만들어 놓았기 때문이다.
따라서 위의 clean처럼 컴파일이 아닌 다른 작업을 할 때에는 파일 이름이 아닌 레이블을 적어준다.

'Makefile 강좌' 카테고리의 다른 글

make 활용 강좌 - 2강  (0) 2010.05.30
make 활용 강좌 - 1강  (0) 2010.05.30
And

make 활용 강좌 - 2강

|
make 활용 강좌 - 2강

make - GNU make utility to maintain groups of programs

#쉽게 이해하는 것이 목적이므로 본래의 의미와 약간 다를 수 있음을 미리 알려둔다.


0. 실행 방법
$ make 대상파일

위처럼 입력하면 현재 디렉토리에 Makefile라는 이름을 가진 파일이 있는지 확인한 후,
있으면 그 파일 안의 내용을 실행한다.
없으면 에러 메시지를 출력한다.


1. Makefile 작성법
#주의사항 command를 입력할 때에 반드시 TAB을 한 후 command를 작성해야 함
target file ... : dependency file ...
(TAB)command
...

번역하면

만들 파일 : 필요한 파일 ...
(탭)명령어
...

실행 순서
  (1) target file을 생성하기 전 dependency file이 있는지 확인
  (2-a) 있으면 command를 실행하여 target file을 생성
  (2-b) 없으면 dependency file을 먼저 생성한 후 target file을 생성

'Makefile 강좌' 카테고리의 다른 글

make 활용 강좌 - 3강  (0) 2010.05.30
make 활용 강좌 - 1강  (0) 2010.05.30
And

make 활용 강좌 - 1강

|
make 활용 강좌 - 1강

make - GNU make utility to maintain groups of programs

#쉽게 이해하는 것이 목적이므로 본래의 의미와 약간 다를 수 있음을 미리 알려둔다.

해석하면 프로그램 소스 관리 유틸리티가 된다.
간단히 설명하면 매일 반복되는 소스 수정과 컴파일 과정을 편리하게 해주는 유틸리티이다.
개발 실무를 접해 보지 못한 이들이 이해하기에는 다소 무리가 있을 것 같아 자세한 설명은 생략한다.
작성법을 살펴보고 예제를 통해 어떤 장점이 있는지 알아보자.

make라는 프로그램은 개발자가 작성해 놓은 Makefile이라는 이름을 가진 파일을 열어 그 안의 내용을 실행한다.

우선 test.c라는 간단한 소스파일과 Makefile을 작성해 보자.

1. test.c 작성
$ vi test.c
#include <stdio.h>
int main()
{
  printf("Hello world\n");
  return 0;
}
:wq


2. Makefile 작성
#주의 사항 : gcc 앞에 space bar가 아닌 TAB이 되어 있어야 함.
$ vi Makefile
test : test.o
  gcc -o test test.o
test.o : test.s
  gcc -c test.o test.s
test.s : test.c
  gcc -S test.c
clean :
  rm test test.o test.s test
:wq


3. make 실행
$ make test
$ ls
Makefile  test  test.c  test.o  test.s
$ ./test
Hello world
$ rm test test.o test.s

$ make test.o
$ ls
Makefile  test.c  test.o  test.s
$ rm test.o test.s

$ make test.s
$ ls
Makefile  test.c  test.s
$ rm test.s

$ make test
$ ls
Makefile  test  test.c  test.o  test.s
$ make clean
$ ls
Makefile  test.c

'Makefile 강좌' 카테고리의 다른 글

make 활용 강좌 - 3강  (0) 2010.05.30
make 활용 강좌 - 2강  (0) 2010.05.30
And
prev | 1 | ··· | 6 | 7 | 8 | 9 | next