폴더에있는 모든 소스를 컴파일하여 실행화일을 만든다.
$ g++ -o test *.c
폴더에 있는 모든 오브젝트 파일과 실행화일을 제거한다.
$ rm -f *.o test
만약에 컴파일할때 실행화일의 이름을 정해주지 않으면 실행화일은 a.out 로 생성됩니다.(참고)
makefile 또는 Makefile 또는 GNUmakefile 중에 하나에
test : test.o
[텝] gcc test.o -o test
test.o : test.c
[텝] gcc -c test.c
라고 입력한후에
$ make 명령을 하면
컴파일이 됩니다.
([텝] 이라고 써져있는 부분은 실제로 탭을 누르시고 만약 스페이스로 하시면 Makefile:2 *** missing separator. Stop. 에러가 납니다.)
makefile 와 Makefile 와 GNUmakefile 중에 일반적으로 Makefiel 을 사용을 권장하는데
그이유는 GNUmakefile 은 예전버전의 make 실행과 호환이 안되는경우가 있고
makefile 은 소스와 헷갈릴수 있다고 하네요.
만약 소스가 test1.c test2.c test3.c 이렇게 3개라면
Makefile 을 다음과 같이 작성합니다.(만약 모든소스에 io.h 가필요하다고 했을경우)
test : test1.o test2.o test3.o
[텝] gcc test.o -o test test1.o test2.o test3.o
test1.o : io.h test1.c
[텝] gcc -c test1.c
test2.o : io.h test2.c
[텝] gcc -c test2.c
test3.o : io.h test3.c
[텝] gcc -c test3.c
라고 작성해주심되고요
objects = test1.o test2.o test3.o
test : $(object)
[텝] gcc test.o -o test $(object)
test1.o : io.h test1.c
[텝] gcc -c test1.c
test2.o : io.h test2.c
[텝] gcc -c test2.c
test3.o : io.h test3.c
[텝] gcc -c test3.c
clean :
[텝] rm $(object)
이렇게 작성해 주셔도 됩니다.
그런후에
$make 명령을 하시면 컴파일 및 링크가 되어서 실행화일 test 가 만들어지고요
$make clean 명령을 하시면 모든 오브젝트 화일이 지워집니다.
Makefile 을 다음과 같이 gcc 부분을 $(CC) 로 해도 되고요 g++ 로 해도 됩니다.
objects = test1.o test2.o test3.o
test : $(object)
[텝] $(CC) test.o -o test $(object)
test1.o : io.h test1.c
[텝] $(CC) -c test1.c
test2.o : io.h test2.c
[텝] g++ -c test2.c
test3.o : io.h test3.c
[텝] g++ -c test3.c
clean :
[텝] rm $(object)
gcc 를 $(CC) 로 바꿔 줘도 되는 이유는 Pre-defined macro 되어있어서 입니다.
CC 나 cc 는 gcc 를 의미한느 것으로 미리 정의 되어 있다는 얘기입니다.
gcc 는 또한 어셈 포트란 C++ 등을 모두 포함되어있으며, g++ 는 C++컴파일을 의미합니다.
다음은 Pre-defined macro 내용입니다.
AR = ar (Archive maintaining program)
AS = as (Assembler)
CC = cc (= gcc , C compiler)
CXX = g++ (C++ compiler)
CO = co (extracting file from RCS)
CPP = $(CC) -E (C preprocessor)
FC = f77 (Fortran compiler)
LEX = lex (LEX processor)
PC = pc (Pascal compiler)
YACC = yacc (YACC processor)
TEX = tex (TEX processor)
TEXI2DVI = texi2dvi (Texiinfo file processor)
WEAVE = weave (Web file processor)
RM = rm -f (remove file)
출처 : http://paper.cyworld.com/ggogilee/920537
'C/C++언어' 카테고리의 다른 글
각 언어별 3중 포인터 (0) | 2008.05.06 |
---|---|
쉬프트 연산과 곱셈 (0) | 2008.03.26 |
ASSERT(), VERIFY(), TRACE() (0) | 2008.03.04 |
템플릿 사용한 max 만들기 (0) | 2008.03.03 |
<이클립스 디버그 방법> (0) | 2008.01.28 |