GCC란 GNU 컴파일러 모음(GNU Compiler Collection, 줄여서 GCC) 으로서, GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러 입니다.
사용법
기본적인 사용법
gcc 이후에 컴파일 하고싶은 파일을 명시해주면, 결과물로 a.out이라는 바이너리 실행 파일이 생성 됩니다.
$ gcc main.c
해당 파일을 실행할 때에는 해당파일의 경로를 명시해주면 됩니다.
// 경로가 부정확한 경우, 실행 X
$ a.out
zsh: command not found: a.out
// 정확한 경로, 정상적인 실행 O
$ ./a.out
hello world!!!
즉, 리눅스 환경에서는 파일 이름 앞에 현재 디렉터리를 표현하는 ./를 추가해야 정상적으로 실행이 됩니다. 여기서 마침표(.)는 현재 디렉토리를 의미하고, 슬래시(/)는 디렉토리를 구분하는 문자 입니다.
./a.out => 현재 디렉토리의 a.out 파일이라고 생각하면 됩니다.
실행파일의 이름 지정
실행파일의 이름을 지정해주지 않을 경우 a.out라는 이름으로 파일이 생성 됩니다. 실행파일 생성시 이름을 지정할 때는 -o(output) 옵션을 사용하면 됩니다.
예제에서 보듯이, -o의 위치는 상관없으며 -o 앞에 이름만 나오면 됩니다.
// 1번 방법
$ gcc -o main main.c
// 2번 방법
$ gcc main.c -o main
파일이름을 지정하지 않을 경우, a.out으로 생성되며 다른 소스를 차례대로 컴파일 할때에 먼저 생성된 a.out을 덮어씌우기 때문에 웬만하면 -o옵션으로 이름을 지정해주는 것이 좋습니다.
VIM 내에서 바로 컴파일?
VIM을 이용해 코딩을 한 후 컴파일 하거나, 결과를 확인하기 위해서 VIM을 나갓다가 들어오는 것은 상당히 번거로울 수 있습니다.
VIM은 :!
로 명령어 실행이 가능한데,
해당 기능을 이용하여 vim 내에서 gcc로 컴파일 및 결과를 확인할 수 있습니다.
// 1번 방법
:!gcc -o %< %
// 2번 방법
:!gcc % -o %<
위에서 사용한 %
는 확장자를 포함한 현재 열린 파일을 뜻하며 %<
는 확장자를 제거한 파일이름을
뜻합니다.
즉, 현재 열려있는 파일이 ‘main.c’ 라고 가정한다면 %
는 “main.c”, %<
는 “main” 를 뜻하며
gcc % -o %<
는 ‘gcc main.c -o main’ 으로,
현재 파일의 이름으로 실행파일이 생성되는 것입니다.
컴파일된 바이너리를 실행하는 방법은 아래와 같습니다.
:!./%<
만약
%<
가 아닌%
(확장자를 포함)로 실행한다면 컴파일된 바이너리 실행파일이 아닌,
‘main.c’ 자체를 실행하는 것이 되버리기 때문에 아래처럼 에러가 발생합니다.:!./% zsh:1: permission denied: ./main.c
.vimrc 설정을 통한 간단한 컴파일
위에서 배운 명령어들을 .vimrc
파일에 단축키로 등록한다면, IDE 처럼 간단하게 컴파일 및 실행이 가능합니다.
아래 처럼 .vimrc
파일에 단축키 설정을 함으로써 간단하게 F2로 저장, F9로 gcc 컴파일, F10으로 실행이 가능하게 되었습니다.
$ vim ~/.vimrc
// F2: 저장, F9: 컴파일, F10: 실행
map <F2> :w!<CR>
map <F9> :! gcc % -o %<<CR>
map <F10> :! ./%<<CR>
추가로, F7키를 눌러 Python도 바로 실행하여 결과를 확인할 수 있으며 이를 응용하여 다른 단축키도 쉽게 설정할 수 있습니다.
map <f7> :! python3 %<CR>