폴더에있는 모든 소스를 컴파일하여 실행화일을 만든다.

$ 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

+ Recent posts