아래 명령어로 C 소스코드를 컴파일 할 수 있다. (파일 이름은 본인 파일에 맞게)
gcc -o Hello.exe Hello.c
-> 그냥 gcc 파일명 해도 컴파일은 된다. 그러면 결과가 a.out으로 나오는데, 위 명령어는 -o 옵션을 통해 이름을 Hello.exe로 바꾸라고 한 것이다.
컴파일 방식은 어떠한 것인가?
소스파일이 있으면 그걸 실행파일(기계어)로 변환한다. 다르게 말하면 이진 바이너리 코드로 바꾼다.
*정확히는 대부분 어셈블리어로 변환하고, 다시 어셈블리어를 기계어로 변환한다.
무엇이 바꿔주는가? 컴파일러가 바꿔준다.
실행파일은 기계어이므로 바로 실행된다.
그래서 인터프리트 방식이나 하이브리드 방식보다 빠르다.
실행하려면 해당 실행파일의 이름을 알려주면 된다.
윈도우는 그냥 이름+확장자로 명령해주면 되지만
유닉스 리눅스는 현재 경로에 있는 파일이라는 정보도 같이 줘야 한다.
Hello.exe
./Hello.exe
이렇게 차이가 있다.
*확장자는 그냥 파일의 종류가 이거라고 알려주는거지 그 확장자(파일이름뒤접미사)에는 다른 정보가 있지 않다. 파일 이름일 뿐...
컴파일 방식은 인터프리트 방식보다 빠르다고 했다.
왜 그런가?
실행할 때 문법 검사를 할 필요가 없고, 기계어를 바로 실행하기 때문이다.
컴파일러가 컴파일하기 전에 문법 검사를 먼저 한다.
그런 면에서 특징이 나오는데, 정리하면 아래와 같다.
- 컴파일 할 때 문법검사를 수행한다.
- 실행할 때 실행파일만 있으면 바로 실행이 가능하다.
- 기계어이므로 인터프리터를 사용하는 방식에 비해 실행속도가 빠르다.
- 소스코드를 노출하지 않는다. 기계어만 배포하면 된다. (소스코드 자산을 보호할 수 있다)
- 빌드할 때 용량이 너무 크다 싶으면 쪼갤 수 있다. .lib .dll .exe 같은 걸로..