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

$ 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
 

C++로 게임 개발을 할 때 몇몇 사람들이 MFC를 사용하기로 결정했다. 늘 저는 ASSERT(), VERIFY(), TRACE() 매크로들의 유익함을 발견한다. 그래서 윈도우 플랫폼을 위한 어떤 프로젝트에서든지 작업할 수 있도록 자신의 버전을 만들기로 했다.


ASSERT()는 값이 0이면 실행을 멈추도록 하기 위해 매개 변수을 평가한다. 릴리즈 모드에서는 assert가 아무 것도 전개되지 않도록 해야한다.


VERIFY()는 릴리즈 모드에서 매개 변수를 전개하도록 되어 있는 것을 제외하고는 ASSERT()와 아주 유사하다.
ASSERT()는 어떠한 함수 호출도 포함되어 있지 않는 표현으로 사용되어야만 한다. 함수 호출을 포함하는 표현을 위해 VERIFY()를 사용해야만 하고 그렇게 해서 함수 호출은 릴리즈 모드에서도 보전된다.


TRACE()는 디버그 윈도우에 출력되는 것을 제외하고는 printf()의 대응물이다. 릴리즈 모드에서는 TRACE() 또한 아무것도 전개하면 안된다.


세 개의 매크로들 중 어떤 것도 릴리즈 모드에서 어떤 런타임 벌점을 의미하지 않는다. 그 매크로들은 미리 정의된 _DEBUG 매크로를 사용해서 디버그 모드와 릴리즈 모드 사이를 구별한다. 이것은 Microsoft Visual C++에 특정적이다. 만약 다른 몇몇 다른 컴파일러를 사용하고 있다면 적절한 매크로를 사용해야만 할 것이다. 


ASSERT(), VERIFY(), TRACE()를 지원하는데 필요한 두 파일이 있다. 그것은 debug.h와 debug.cpp이다. 프로젝트의 몇몇 메인 헤더에 debug.h를 추가해야만 한다. 그것은 자신 안에 어떤 파일도 포함하지 않기 때문에 순환 포함(recurrent inclusion)에 의해 더럽혀지지 않는다. 또한 프로젝트의 소스 파일에 debug.cpp를 더해야만 한다.


Discuss this article in the forums
Date this article was posted to GameDev.net: 7/23/2002
(Note that this date does not necessarily correspond to the date the article was written)

See Also: Sweet Snippets


원문 : http://www.gamedev.net/reference/articles/article1846.asp

'C/C++언어' 카테고리의 다른 글

쉬프트 연산과 곱셈  (0) 2008.03.26
[리눅스프로그래밍] makefile  (1) 2008.03.07
템플릿 사용한 max 만들기  (0) 2008.03.03
<이클립스 디버그 방법>  (0) 2008.01.28
printf 문을 만들어보자  (0) 2008.01.28

#include <iostream>

using namespace std;

template <typename T>
T _Max(T left, T right)
{
 return (left > right ? left : right);
}


int main()
{
 double da,db,dc;
 da = 10;
 db = 20;
 dc = _Max(da,db);
 cout << "type is double " << da << ", " << db << " to bigger is " << dc << endl;

 int ia,ib,ic;
 ia = 11;
 ib = 5;
 ic = _Max(ia,ib);
 cout << "type is int " << ia << ", " << ib << " to bigger is " << ic << endl;
 return 0;
}

... ㅡ.ㅡ...

'C/C++언어' 카테고리의 다른 글

[리눅스프로그래밍] makefile  (1) 2008.03.07
ASSERT(), VERIFY(), TRACE()  (0) 2008.03.04
<이클립스 디버그 방법>  (0) 2008.01.28
printf 문을 만들어보자  (0) 2008.01.28
여러 C++ 컴파일러  (0) 2007.09.06
fatal error C1010: unexpected end of file while looking for precompiled header directive


VC++은 파일 하나를 컴파일 할때 INCLUDE해야 할 파일이 너무 많아서 컴파일이 늦어지는 것을 막기위해 precompiled header라는 것을 만들었습니다.

이 헤더 파일(보통 stdafx.h)을 include한 .cpp는 미리 만들어진 precompiled header를 기본으로 사용하게 되어 있습니다.

하지만 다른 컴파일러로 만들어진 라이브러리(소스)에는 이런 것이 없겠죠.

그럼에도 VC++ 컴파일러가 자기는 precompiled header가 필요하다고 저런 이상한 메시지를 냅니다.


이런 경우.. 해당하는 모든 .cpp의 맨 첫줄에 #include "stdafx.h"를 넣어주거나...

해당하는 파일의 precomiled header 플래그를 꺼주면 됩니다.

끄는 방법은 project/setting 에서 c/c++ tab의 precomiled header 관련 category에서 사용하지 않음을 선택하면 됩니다

출처 : http://cafe.naver.com/hopistudy/71

[Flash] http://plusd.itmedia.co.jp/games/articles/0709/18/haruhi_swf_sample5/haruhi512/haruhi512.swf



어쨋든 출처는 http://plusd.itmedia.co.jp/games/articles/0709/18/news006.html

음... 이미지 1장이라고 한다.
구현할수 있을까...?

참고로 위의 그림은 "스즈미야 하루히의 약속"이라는  PSP게임의 모션보이트 효과이며
저 효과에 사용된 그림은 1장이라고 한다.

추가 자료 사이트
http://www.motionportrait.com/about/

'알고리즘' 카테고리의 다른 글

다중패턴검색 알고리즘  (0) 2014.07.14
NPC 인공지능 처리 기본 구성  (0) 2010.07.04

+ Recent posts