반응형
Dev-C++ 간단 튜토리얼
뭐 여차 여차 어쩌다 보니 =_=;;

VC님이 고장나셨다(고장 나셨다 <== 이말을 3번 정도 고쳐썼다 왤까? :p)

뭐... 원하는 기능을 얻기위해 Linker를 다른것으로 교체하는것이 문제였다.

ㅠㅠ... 링커님이 재대로 작동을 안하신다. ㅠㅠ

그래서 뭐 여차 여차 하다보니 GNU인 Dev C++이 마음에 끌렸다.

나름대로 이놈만큼 쓸만한것도 없는거 같다. 헷헷

-------------------------------

Dev-C++ 간단 튜토리얼
작성: gpgiki ( http://gpgstudy.com/gpgiki/ 또는 http://gpgstudy.coco.st/gpgiki/ )



Dev-C++ 이란?
Dev-C++은 GCC를 Win32 플랫폼으로 이식한 컴파일러 패키지인 MinGW에 대한 GUI 통합 개발 환경으로,(헥헥...-.-;). 오픈 소스 기반 자유 소프트웨어이자 무료입니다(영어에서는 자유와 무료 모두 free라서 항상 자유와 무료의 차이를 강조하지만, 한글에서는 그런 염려가 없습니다... 어쨌든 Dev-C++은 가격 면에서도 free(무료)입니다..).


GCC는 GNU 시스템(현실적으로 말하면 리눅스 시스템)에서 사용하는 C++ 컴파일러 집합이구요. MinGW는 GCC를 비롯해서 GNU Binary Utilities, GNU 디버거(GDB), GNU make를 포함한 여러 필수적인 도구&유틸리티들을 Win32 애플리케이션 개발 용으로 Win32 플랫폼에 맞게 이식한 '도구 모음'입니다.


GCC의 또다른 Win32 이식으로는 Cygnus사의 CygWin? 있으며, MS-DOS용으로는 DJGPP가 있습니다. CygWin?도 좋은 도구이나, CygWin?으로 작성한 애플리케이션을 배포할 때에는 반드시 CygWIn.dll이라는 DLL을 함께 배포해야 한다는 단점이 있습니다. 반면 MinGW로 만든 프로그램은 MSVCRT.DLL만 있으면 되구요. MSVCRT는 초창기 Win95 버전 이후의 모든 Win32 OS들에 기본적으로 깔려 있으므로 별 문제가 되지 않습니다.


앞의 두 가지와 MinGW 모두 기본적으로 명령행 기반이므로 중급 이하의 개발자들은 접근하기가 힘들다는 단점이 있는데요. MinGW를 좀 더 편하게 사용할 수 있도록 하는 것이 Dev-C++입니다. 즉 Dev-C++은 컴파일러가 아니고 MinGW를 위한 통합 개발 환경(IDE)입니다. 또한 Dev-C++을 !Cygwin을 위한 통합 환경으로 사용할 수도 있으며, Dev-C++ 자체의 소스 코드가 공개되어 있으므로, 공개된 BC++5.5 컴파일러를 사용하게 만들 수도 있을 거라고 생각합니다...


통합 개발 환경이므로 Dev-C++ 안에서 소스 작성, 컴파일, 링크, 빌드, 리소스 편집까지 할 수 있으며, 디버깅 역시 거의 통합되어 있습니다. 또한 코드 편집기도 상당히 편리합니다. 문법 강조(키워드, 문자열 등등을 다른 색깔로 표시하는 것)를 지원하며, 제한적이나마 코드 자동 완성도 지원합니다. VC++의 인텔리센스 수준은 아니고, 일종의 상용구 기능이라고 볼 수 있습니다.


GUI의 수준으로 치면... 물론 VC++보다는 불편하지만, 예전의 BC++3.1 for Win 보다는 훨씬 낫구요. VC++의 인텔리센스 기능을 그리 사용하지 않는 개발자라면 별로 불편없이(또는 아주 편하게) 사용할 수 있습니다.


결정적인 단점은 문서화입니다... 사용법에 대한 간단한 도움말밖에 들어있지 않구요. Win32 API에 대한 레퍼런스가 없다는 점이 큰 문제인데, 책이나 웹 상의 MSDN을 이용하는 수밖에... 어쨌든 코드 편집기 안에서 F1을 눌러서 정보를 찾는 식은 통하지 않습니다..


MFC는 당연히 사용하지 못하지만, 큰 단점이 되지는 않을 것 같구요. 무엇보다도 중요한 것은 GCC, MinGW, Dev-C++ 모두 오픈 소스 프로젝트이며, 많은 사람들이 자발적으로 자신의 시간과 노력을 투자해서 좀 더 좋은 소프트웨어 개발 환경으로 개선시키고 있다는 점입니다. 예를 들어서.. 누군가가 Dev-C++용 DX8 정적 라이브러리 및 헤더 파일를 만들어서 공개한 덕분에 Dev-C++로도 DX 프로그래밍을 할 수 있게 되었습니다(재미있는 것은... 옛날 옛적의 BGI용 프로그램을 그대로 컴파일할 수 있게 해주는 라이브러리도 있더군요... BGI 기억하세요?).


또한... 많은 오픈 소스 라이브러리들이 Dev-C++(본질적으로는 MinGW)를 지원합니다. 대표적으로는 SDL 같은 것들... 특히 플랫폼 독립적인 라이브러리 또는 프로젝트들은 MinGW를 지원하는 경우가 많습니다.


어쨌든... VC++를 구입할만한 여건이 안 되는 분들이라면.. 불법 복제를 고려하기 전에 Dev-C++을 먼저 생각해 보시구요. 터보 C나 BC보다는 좋은 선택인 것은 당연하구요..


다음은 Dev-C++의 스크린샷입니다.





관련 링크들:

Dev-C++: http://www.bloodshed.net/devcpp.html
MinGW : http://www.mingw.org/
GCC : http://www.gnu.org/software/gcc/gcc.html
Cygwin : http://sourceware.cygnus.com/cygwin


설치 및 설정
2001.05.07 현재 Dev-C++의 최신 버전은 4.01이고, 위에 나온 Bloodshed 홈에서 다운받을 수 있습니다. 다운받을 파일은 devcpp4.zip과 devcpp401.zip입니다. 4.0 풀패키지를 설치한 후 4.01 업그레이드 패치를 덮어씌우면 되구요. 풀 패키지 안에는 MinGW가 포함되어 있으므로 Dev-C++만 깔면 기본적인 준비가 끝납니다. 추가적으로, 콘솔 기반 디버거인 GDB 대신 Cygnus의 Insight Visual Debugger를 사용할 수도 있습니다.



설치:

설치 방법은 매우 간단합니다. 4.0 풀 패키지(devcpp4.zip)를 아무 디렉토리나 풀어놓고 Setup.exe를 실행하면 됩니다. 흔히 보는 InstallShield? 설치 프로그램이므로 그냥 클릭만 몇 번 하면 됩니다. 특별히 선택할 것도 없구요... 기본 디렉토리는 C:Dev-C++이고, 이 글에서도 그 디렉토리를 기준으로 이야기하겠습니다.


4.0 풀 패키지를 설치한 후에는 4.01 패치(devcpp401.zip)를 설치해야 하는데요. 그냥 압축 파일을 설치 메인 디렉토리에 풀면 끝입니다. 4.01은 MinGW 부분은 업데이트하지 않고, 그냥 Dev-C++ IDE만 갱신하는 것입니다.

추가적으로 Insight5 비쥬얼 디버거를 설치할 수도 있는데요, 이건 디버깅 부분에서 이야기하겠습니다.



설정:
설치 후 컴퓨터를 다시 시동할 필요는 없구요. 또 Autoexe.bat 같은 것을 건드릴 필요도 없습니다. Dev-C++를 처음 실행하면 .dev 파일과 .c, .cpp, .h 파일을 탐색기와 연결시킬 것인가를 묻는데, 둘 다 연결시키면 되구요. 그 아래의 Gnome과 Default는 GUI의 아이콘 스타일인데, Gnome을 선택하면 리눅스 기분을 느낄 수 있습니다... 기능과는 상관없습니다.

이것으로 기본적인 설치와 설정은 모두 끝난 것입니다. 이 상태에서 Win32 콘솔 프로그램이나 Win32 API 프로그램을 작성할 수 있으며, OpenGL 프로그램도 작성할 수 있습니다.


확인을 위해, 메뉴의 Options - Compiler Options를 선택하고, Directories 탭에 나열되어 있는 디렉토리들이 제대로 되어 있는지 점검해 보세요...



디버깅
디버깅는 두 가지 방식이 가능한데, 하나는 패키지 자체에 포함되어 있는 GDB를 이용하는 것이고, 또 하나는 Cygnus의 Insight5 Visual Debugger를 사용하는 것입니다. Insight5가 더 편합니다... GUI로 중단점(breakpoint)를 설정하고, 단계별로 코드를 실행시키면서 툴팁으로 변수의 값을 보는 등 VC++ 디버거에서 할 수 있는 것들을 거의 다 할 수 있습니다.


Insight5는 위의 bloodshed 홈에서 다운받을 수 있습니다. 파일 이름은 insight5_win32.zip입니다. 압축 파일을 Dev-C++ 메인 디렉토리에 풀면 됩니다(서브디렉토리까지 함께 풀어야 합니다.. 예를 들어서 윈집의 경우 use folder name을 체크해야 합니다. 뭐 윈집을 별다른 설정 변경 없이 사용하는 분은 압축 풀 때 그냥 메인 디렉토리만 제대로 지정하면 될 겁니다). 그러면 서브 디렉토리 bin에 몇 개의 파일들이 추가되며, 또한 원래 있던 gdb.exe가 덮어씌워집니다. 또한 share라는 서브 디렉토리에 파일들이 추가됩니다.


한 가지 주의할 점: Dev-C++에는 빌드 모드(디버그 모드, 릴리즈 모드 등)라는 것이 없습니다. Dev-C++에서 디버깅 모드로 전환한다는 것은 Option - Compiler Option 메뉴의 Linker 탭에서 Generate debugging information을 체크한다는 것을 의미합니다. 사실 VC++의 '모드'라는 것도 서로 다른 설정들을 하나의 세트로 묶은 것인데요... Dev-C++의 이후 버전에서는 빌드 모드라는 개념이 추가되길 바랍니다...


어쨌든.. 디버깅을 하려면 위에 나온 대로 Generate debugging information이 체크된 상태에서 실행 파일을 만들어야 합니다. 일단 실행 파일이 제대로 만들어지고 나면, 메인 메뉴 Execute - Debug로 디버깅 창을 띄울 수 있습니다(사실 Dev-C++과는 독립적인 프로그램입니다..).


그 다음부터는 VC++의 디버거와 거의 동일한 방식으로 디버깅을 할 수 있습니다...


다음은 Insigth의 스크린 샷입니다(앗.. 오른쪽 상단에 윈앰프 모서리가.. 요즘 산타나를 듣고 있습니다^^).. 마우스 툴팁으로 변수 값을 볼 수 있구요.. 위쪽 아이콘들을 보면 다양한 방식의 단계별 실행을 지원한다는 점을 알 수 있을 것입니다. 어쨌든 원래 들어 있던 명령행 기반 GDB보다는 이게 더 편할 것 같네요.




Dev-C++을 이용한 DirectX 8.0 프로그래밍(예~ 가능합니다!)
DX 임포트 라이브러리 및 헤더 설치, 설정
우선 필요한 것은 DX에 대한 호출들을 DX DLL들과 연결해주는 임포트 라이브러리들을 구해서 설치하는 것입니다. DX SDK에 있는 것들은 사용할 수 없구요. MinGW에 맞게 포팅한 라이브러리들이 필요합니다. 여러 가지 것들이 있겠지만, 제가 시험해 본 것은 GameCoding? UK 2000( http://www.gamecoding.co.uk/ )에서 받은 것입니다.


http://members.xoom.com/pauljgerf/newsitefiles/Directx8%20For%20Dev-c.zip


여기에는 임포트 라이브러리들과 헤더들이 모두 들어 있습니다. 이걸 적당한 디렉토리에 풀면 여러 서브디렉토리들이 생깁니다. Libs에는 라이브러리들이, Includes에는 헤더 파일들이 들어 있구요. 라이브러리 파일은 VC++와는 달리 확장자가 .a입니다..(유닉스에서 기원한 것이라서.. 참고로 목적 파일(.obj)는 확장자가 .o입니다)


이제 필요한 것은 컴파일러와 링커에게 그 디렉토리들을 알려주는 것인데요. 그냥 Libs와 Includes의 내용을 각각 Dev-C++ 메인의 lib와 include에 복사해 버려도 되지만, 나중에 관리가 번거로울 수 있습니다..


그 임포트 라이브러리 작성자의 제안에 따라, Libs의 것들은 메인의 lib에 함께 집어 넣고, Includes의 헤더들은 메인의 include 아래에 DX8이라는 서브디렉토리를 만들어서 거기에 집어넣기로 하죠.. 그러나 꼭 그렇게 해야 하는 것은 아닙니다.. 편한 대로 하면 되구요. 아래에 설명하는 것을 참고해서 디렉토리 설정만 제대로 해주면 됩니다.


디렉토리 설정은 두 가지 방법이 있습니다. 하나는 Options | Compiler Options의 Directories 탭에서 설정하는 것이고, 또 하나는 Project | Project Options에서 설정하는 것입니다. Options 메뉴에서 설정한 것은 모든 프로젝트들에 적용되고, Project 메뉴에서 설정한 것은 해당 프로젝트에만 설정됩니다(설정 내용은 프로젝트 파일 .prj에 저장되구요).


만일 DX 프로그래밍을 주로 한다면 Options에서 설정하고, OpenGL이나 다른 프로그래밍도 많이 한다면 프로젝트 단위로 설정하면 됩니다. 그러나 프로젝트마다 매번 설정을 하는 불편을 피하기 위해서는 프로젝트 템플릿을 만드는 것도 좋겠죠.. 프로젝트 템플릿은 잠시 후에...


어쨌든, 라이브러리 파일들은 메인의 lib 디렉토리에 넣었으니 따로 설정할 필요가 없구요. 헤더 파일들의 위치만 Options | Compiler Options | Directories의 C include files:와 C++ includes files:나 Project | Project Options의 Extra include directories 에 지정해 주면 됩니다. 라이브러리 파일들을 다른 곳에 넣었다면 Options | Compiler Options | Directories의 Libraries directories에 지정해 줘야 하겠죠. 단 프로젝트 옵션에는 라이브러리 디렉토리를 지정하는 곳이 없습니다... 대신 개별 라이브러리 파일들의 경로를 지정해 줄 수는 있습니다.


새 프로젝트 만들기
이것으로 기본적인 준비가 끝났구요.. DX 프로그램을 만들려면 새 프로젝트를 선택할 때 Windows Application을 선택해야 합니다.. Console Application이 아니라는 점을 주의해야 합니다.


프로젝트 이름 정하고 프로젝트 파일을 저장하면 이름 없는 소스 코드 파일 하나만 생깁니다. 그 파일을 제거하거나, 그 파일의 내용을 지우고 일반적인 방식대로 소스 코드를 작성하면 됩니다(..만 VC++에서 하던 것과는 약간의 문법적인 차이가 있을 수 있는데.. 이 부분은 나중에...).


빌드
소스 코드가 끝났다고 치고.. 컴파일과 빌드를 하려면, 프로젝트 옵션에서 링크할 라이브러리 파일 또는 목적 파일들을 지정해야 합니다. 라이브러리 파일들은 Project | Project Options의 Further object... 라고 되어 있는 텍스트 상자 안에 지정해야 합니다.


파일들을 지정하는 방식은 두 가지입니다. 하나는 Load object files 버튼을 클릭해서 직접 지정하는 것이고, 또 하나는 -l 지시자를 이용해서 지정하는 것입니다. -l은 라이브러리 파일들의 위치가 컴파일러 옵션 대화상자에서 지정되어 있을 경우만 가능합니다. lib 디렉토리에 파일들을 넣었다면, lib 디렉토리가 컴파일러 옵션에 지정되어 있으므로 -l 옵션을 사용해도 됩니다...


-l 다음에 라이브러리 이름을 붙이면 되는데요. 라이브러리 이름은 라이브러리 파일 제일 처음의 lib와 제일 끝의 .a를 뺀 것입니다. 예를 들어서 DX8의 Direct Input을 사용하려면.. 원래 DX SDK에서는 dinput8.lib를 링크해야 하는데, Dev-C++에서는 libdinput8.a(GameCoding? UK에서 받은 임포트 라이브러리를 사용한다고 했을 때)를 링크해야 하겠죠. libdinput8.a를 링크하려면 Further object.. 부분에 -ldinput이라고 지정하는 식입니다...


여기서 한 가지 주목할 것은... 원래의 DX SDK의 라이브러리 이름과 Dev-C++에서의 라이브러리 이름, 그리고 -l로 지정하는 라이브러리 이름의 관계입니다. SDK 이름에서 앞에 lib를 붙이고 확장자를 .a로 바꾸면 Dev-C++ 라이브러리 이름이 되고, 거기서 다시 lib를 빼고 .a를 빼면 -l 라이브러리 이름이 됩니다(예: d3d8.lib => libd3d8.a => -ld3d8).


언제 뭘 사용해야 하는지 일일이 고민하기 싫으면.. 그냥 다 지정해놓으면 됩니다... 아래 부분을 복사해서 Further object .. 에 넣으면 됩니다.


-lgdi32 -ld3dim -ld3drm -ld3dx8d -ld3dxof -lddraw -ldinput -ldinput8 -ldlcapi -ldplayx -ldpnaddr -ldpnet -ldpnlobby -ldpvoice -ldsetup -ldsound -ldxguid -ld3d8

다음으로 중요한 것은 COM을 위한 추가적인 컴파일러 옵션을 지정하는 것입니다. 컴파일러 옵션은 Project | Project Options의 Extra comiler options에서 지정합니다. DX에 필요한 옵션은 -fvtable-thunks 입니다..

그 외에 디버그 모드로 빌드하려면 디버깅 섹션에서 말했던 것처럼 디버그 정보를 포함시키도록 설정해야 하구요..



Dev-C++을 이용한 OpenGL 프로그래밍
이 부분은 별로 할 얘기가 없네요. 이미 OpenGL에 대한 지원이 포함되어 있거든요. 그냥 새 프로젝트 만들 때 OpenGL 프로젝트를 선택하면 됩니다(File - New - Project - MultiMedia? - OpenGL Template). 그러면 픽셀 포맷 설정, OpenGL 창 생성, 윈도우 프로시저, 메시지 루프 등등 잡다한 부분에 대한 뼈대 코드가 만들어집니다.... 거기서부터 출발하면 되구요.


Glut의 경우에는 프로젝트 옵션에서 추가적인 라이브러리 부분에 -lglut32 을 추가해주면 됩니다.


두경우다 glu함수들을 쓰신다면 -lglu32도 추가해주셔야합니다.


이제 일정한 패턴이 보이시죠.. 기본적인 윈도우즈 API 라이브러리가 아닌 어떤 특정한 라이브러리를 사용할 때에는, 헤더 경로 지정해주고, -l 로 라이브러리 파일 지정해 주는 과정이 필요한 것입니다.. 뭐 이건 VC++도 마찬가지죠... 현재 많은 오픈 소스 프로젝트들이 Dev-C++(본질적으로는 Mingw)를 지원합니다. 프로젝트 자체가 Mingw을 지원하는 경우도 있고, VC++용 소스를 Mingw에 맞게 이식하는 경우도 있구요. 이식의 경우 일단은 sourceforge.net의 Mingw package repository를 참고하는 것이 좋을 것 같구요. (zlib, libpng 같은 것들이 있네요.). 그 외에도 독자적으로 이식 작업을 하는 사람들도 있구요(위의 DX 라이브러리 등등).
 
http://sejinhome.egloos.com 여기에서 퍼왔어요
반응형

+ Recent posts