이글루스 로그인
오호...내 딸 (심)청아~~아니.. (서)연아~~~
언제라도 그렇지만, 나의 3살박이 딸내미는 이뿌다.

김재인 선생님의 글 남자 젖꼭지 왜 생겼나?을 읽다가 남긴 덧글에 "왜 이쁜딸 키우면서 한번도 사진을 안올리냐"고 하시기에.... 문득 인생을 사는데 그다지 필요하지도 않을것 같은 emacs따위(헉,, emacsen들에게는 죄송... 꾸벅)에 대한 글이나 남겨 둘려고 만든 이 블로그에, 사람사는 것 같은 분위기가 날 것 같은 이쁜(나한테는 적어도~~) 사진한장 올려본다. 내 블로그를 읽는 사람이 한명 있다는 거가 참 즐거운거구나... 사람을 꼬여야 하겠다. ㅋ.

그/런/데/내/딸/은 ....

일찍이, 추상기반클래스의 멤버변수와 멤버함수의 됨됨이가 그러하지 못하다하면, 이로부터 파생된 클래스 역시 그 이상 가기가 힘들다고들 하던데, 어쩌면 저리도 각종 연산자와 훌륭한 Self-drawing routine을 탑재한, 거기다가 I/O또한 훌륭한 파생클래스 객체가 나온 것인지.... 아니면, 조금 덜떨어진 클래스로 설계되어도, 잘만들어진 Class Factory루틴만 만든다면 모든것이 보완될 수도 있다는 어떤 사람의 얘기가 내 와이프에게 적용된 것인지.....

아무튼.. 내가 하고 싶은말은, 내 딸이지만... 정말 나와 비교해서... 정말...

예/뿌/고/훌/륭/하/다


EOF

by joonhwan | 2005/09/21 23:58 | 잡담 | 트랙백(1) | 덧글(4)
sed를 사용해서 visual studio 6 워크스페이스의 dependency 편하게 보기.
오늘은 예전 LG화학다닐때 텍스트로 된 실험데이터를 특정형태로 바꾸기 위해 사용했던 sed(streams editor)를 프로그래머 업무(-_-;)에 처음 사용해 보았다.

목적은 dsw파일(vs6의 워크스페이스 파일임)을 GraphViz의 dot파일을 사용해서 자동적으로 gif파일로 된 project depency 모식도(?) 를 만들도록 하는 것이다. 음.. 아직 내공이 부족하여 전자동은 힘들고, 일단 원래의 dsw파일을 sed를 통해 1차 자동 변환을 한다음, 2차는 수작업으로 dot파일을 만들어야 겠다.

awk가 훨씬 더 강력하다는 데.. 눈이 핑핑 돈다.

sed -n "/(^Project: )|(Project_Dep_Name)/p" ./masterBuild.dsw | sed "/^Project: /s/^Project: "([A-Za-z0-9._ ]*)".*/1/" | sed "s/[ ]*Project_Dep_Name/->/"

위에서는 masterbuild.dsw라는 워크스페이스를 사용했지만서도, 여기에 다른 dsw파일을 넣어도 될 것 같다.

아아.. 머리아퍼.. 정규표현식 기초만 가지고 하기에는 위와 같은 것도 버겁다.

by joonhwan | 2005/09/09 10:58 | 트랙백 | 덧글(2)
Software공학과 Formal Inspection. 우웩#$%@
지금 내가 일하는 회사는 PhotonDynamics라는 회사의 한국지사다. 미국에서 유명하신 프로그래머들 분들께서 만든 대단한 프로젝트 소스코드를 이전받는 작업중이다. 근데, 그걸 위해 해당 소프트웨어 제품 전반에 걸친 System Documentation이라는 문서를 chm파일로 만들어 달라고, 울팀 매니저 미국측에 요청했던 모양이다. 그랬더니 그쪽에서 마지못해 넘겨준 문서라는게... -_-; 한마디로 하기싫은 거 대충한 거 같다.

제대로 된 인수인계 문서를 받으려면, 울 팀 매니저가 Format Inspection이란걸 하란다.

이게 먼가... 여기가면 간단한 설명을 볼 수 있었다(구글에서 찾은 또 다른 정보는 이 방법론이 걸핏하면 사람 짤라대는 IBM이라는 공룡기업에서 근무하던 유명하신 아무개 아무개 박사님께서 만든거라는데.....).

이게 또 먼가....

공부 할 게 또 늘은거 같긴 한데.....

조금 답답하다. 요구사항 관련 문서나, 디자인 문서 같은 거, 또 소스코드 같은걸 받아서 봐야 하는데... 헐..

답답해서 김재인 선생님께 여쭤봤다. 역시 제일 중요한 것은 소프트웨어 전체적 구조를 다루는 내용에 대한 파악이 먼저, 그리고 세부사항 들여다보기, 모르는 것 전임자에게 물어보기. 이 얼마나 실용적인가.

해야할 일이 무엇인지. 명확한 상황에서 일단 할 수 있는 것 부터 해 보고 싶다.

항/상/대/단/한/것/과/맞/닥/드/리/고/사/는/세/상

재밌군..




by joonhwan | 2005/09/02 09:52 | 잡담 | 트랙백 | 덧글(4)
파일을 열때 ^M(즉 /r)이 잡히는 경우..
아직 default coding system에 대해서 명확하게는 모르겠는데...

unix 는
mac 은
dos 는
이 줄바꿈 문자들이다.

는 LF
는 CR

그런데, emacs에서는 find-file(C-x C-f)하기 전에
universal-coding-system-argument(C-x RET c) 한 다음, undecided-dos를 입력하고 RET, 그 다음에
find-file(C-x C-f)하면 로 되어 있던 텍스트파일이 ^M으로 표시되는 것을 막아준다.

by joonhwan | 2005/08/26 10:13 | emacs | 트랙백 | 덧글(0)
win32 gui and TDD
http://discuss.joelonsoftware.com/default.asp?design.4.18125.9

very nice articles here to read.

especially, first one(written by Michael Feathers) is very interesting because of it's example is on MIDI sound effects!!!!
by joonhwan | 2005/08/14 20:46 | agile programming | 트랙백 | 덧글(0)
post on semantic problem
similar problem he seemed to have also...

check the url http://sourceforge.net/mailarchive/message.php?msg_id=9704594

that's all folks
by joonhwan | 2005/08/13 01:22 | emacs | 트랙백 | 덧글(0)
2005-08-12-Tip 라이브러리 설치 여부 확인법
특정 라이브러리가 제대로 설치되어 있는지 확인하는 방법
locate-library RET 한 다음, 라이브러리 이름(즉, 모드이름)을 적고 RET한다
M-x locate-library RET cc-mode RET
by joonhwan | 2005/08/12 13:49 | emacs | 트랙백 | 덧글(1)
이맥스 키바인딩 정리
[아직 일부만 정리된 버젼임]

이맥스에서 키바인딩(key-binding, 단축키)의 정의

특정 기능을 딴축키로 엮는 것은 대다수의 이맥스의 초심자들이 사용을
시작하면서 하게되는 것 중 하나이다. FAQ에도 이러한 내용은 나와있을 수
있겠지만, 여기서는 좀 더 심화된 내용을 가지고 접근해 보기로 한다.


- 키바인딩에 대한 온라인 도움말

키바인딩은 앞서 말한대로, LISP명령어를 특정 키시퀀스(일련의 하나
이상의 특정 키 조작을 의미)과 연계시키는 것이다. 다음과 같은 것들이
있다. 다음에서 XXX는 키바인딩을 입력하는 부분이다.

1) C-h c XXX : 입력한 키바인딩에 어떤 명령이 연결되어 있는지를 알 수
있다.

2) C-h k XXX : 1)과 같지만 좀 더 상세한 설명이 나온다.

3) C-h w 함수명 : 해당 LISP함수명의 기능에 연계된 키바인딩이 나온다.

4) C-h b : 유용한 기능!!!! 현재상태에서 유효한 모든 키바인딩이 버퍼에
출력된다.



- 사용자가 임의로 키바인딩을 정할때 유의할 점

물론, 많은 이들이 표준 키바인딩보다는 자신만의 키바인딩을 원할
것이다. 다수의 사용자가 동일한 컴퓨터에서 이맥스를 사용하더라도, 손
쉽게 자신만의 키바인딩을 사용할 수있도록 할 수는 있다. 하지만, 다음과
같은 몇가지 지켜야 할 규칙이 있다.

1) 사용자 정의용으로 남겨진 키바인딩은 C-c x (x는 임의 문자)이다. 이
말은, 몇몇 굵직한 잘 갖춰진 이맥스 LISP패키지들은 이 키바인딩을
전혀 쓰지 않는 다는 것이며, 설사 C-c 로 시작하는 키바인딩을
쓰더라도, 문자가 아닌, :;,.<>. 같은 기호가 따라 붙는 키바인딩을
쓴다는 의미이다. 유의할 점 : C-c C-x (x 는 임의 키)는 주모드에
의해 예약되어 있다.

2) 대부분의 컨트롤 키 조합(C-f 같은...)과 Meta키 조합(M-f 따위...)은
이미 이맥스가 사용하고 있다. 몇몇 모드는 소수의 표준 키바인딩의
의미를 바꾸기도 하므로, 처음에는 가능한한 표준 키바인딩은
건드리지 않도록 한다. 이러다 보면, 처음에는 어색했던 표준
키바인딩이 있었다 할 지라도, 차츰 익숙해 질 것이고, 심지어 표준
키바인딩이 대단히 효율적이라는 생각까지 들 것이다. 예를 들어, M-a는
한문단 뒤로 움직이는 것이지만, C 모드에서는 한 statement뒤로
움직이다. 팁: 새로운 주모드를 사용하게 되면, 언제나 C-h b를 통해
키바인딩을 확인해 두자. - 간단한 키바인딩

특정 기능이 이미 키바인딩을 가지고 있다고 하더라도, 사용자는 자기
편한대로(예를 들어, 키보드 상에서 좀 더 조작하기 쉬운 쪽으로 라든가..)
고쳐보려는 생각을 하게 된다. 키바인딩을 하기 위해서 예를 들면, 다음의
문장은 C-c f를 통해 forward-paragraph를 모든 모드에서 실행하도록
한다..

(global-set-key (kbd "C-c f") 'forward-paragraph)

특정 모드만을 위한 키바인딩도 쉽게 설정할 수 있다. 예를 들어

(define-key c-mode-map (kbd "C-c ") 'mark-whole-buffer)

과 같이 할 수 있다.

어떤 모드는 이맥스가 실행될 때 로딩되지 않는 것 도 있다. 이 경우,
이맥스는 c-mode-map이란 것을 알 길이 없다. 이런 경우에는, 해당 변수를
사용하기 직전에 모드관련 LISP패키지를 로딩해 버리면 된다. C모드는
"cc-mode" 패키지에 들어 있으므로,

(require 'cc-mode)와 같이 하면 된다.


대개, foo-mode라는 모드는 foo-mode 혹은 foo 라는 이름의 패키지로
제공된다. C같은 모드들은 예외인데. 이들은 c-mode가 아니고,
cc-mode라는 패키지로 제공된다. C-h f foo-mode RET 하면 특정 함수가
어떤 함수로 부터 제공되는지 알 수 있다.
by joonhwan | 2005/08/12 13:48 | emacs | 트랙백 | 덧글(0)
LG화학에서 사용하던 emacs화일(퇴사하면서 남김)
;; -*- coding : euc-kr; -*-
;;
;; 언어 환경 설정(utf-8이 기본 인코딩!!!)
(set-w32-system-coding-system 'euc-kr)
(set-language-environment "Korean")
(set-buffer-file-coding-system 'euc-kr)
(set-selection-coding-system 'euc-kr)
;;(prefer-coding-system 'euc-kr)
(setq default-input-method "korean-hangul3") ;; 3벌식 설정
(set-input-method "korean-hangul3")
(global-set-key [?S- ] 'toggle-input-method) ;; 한영전환을 shift-space로...!!!!


;; 폰트 설정
;;
;; 글로벌 폰트락 설정
(cond ((fboundp 'global-font-lock-mode)
;; Customize face attributes
(setq font-lock-face-attributes
;; Symbol-for-Face Foreground Background Bold Italic Underline
'((font-lock-comment-face "dark sea green")
(font-lock-string-face "Yellow3")
(font-lock-keyword-face "SlateBlue1")
(font-lock-function-name-face "cornflower blue")
(font-lock-variable-name-face "OliveDrab3")
(font-lock-type-face "SteelBlue2")
(font-lock-reference-face "Purple")
))
;; region선택 구간을 화면에 표시
(transient-mark-mode t)
;; Load the font-lock package.
(require 'font-lock)
;; Maximum colors
(setq font-lock-maximum-decoration t)
;; Turn on font-lock in all modes that support it
(global-font-lock-mode t)))

;;
;; 프레임의 기본 특성 설정
;;
(setq default-frame-alist
'((top . 0) (left . 0)
(width . 125) (height . 50)
(cursor-color . "pale goldenrod")
(cursor-type . bar)
(foreground-color . "gray75")
(background-color . "black")
(font . "-outline-굴림체-normal-r-normal-normal-12-97-96-96-c-*-iso10646-1")))
(setq initial-frame-alist '((top . 0) (left . 0)))
(setq frame-title-format '(buffer-file-name "%f" "%b"));; put buffer name in titlebar



;;
;; c++, c style
;;
(defconst joonhwan-c-style
'((c-tab-always-indent . t)
(c-comment-only-line-offset . 4)
(c-hanging-braces-alist . ((substatement-open after)
(brace-list-open)))
(c-hanging-colons-alist . ((member-init-intro before)
(inher-intro)
(case-label after)
(label after)
(access-label after)))
(c-cleanup-list . (scope-operator
empty-defun-braces
defun-close-semi))
(c-offsets-alist . ((arglist-close . c-lineup-arglist)
(substatement-open . 0)
(case-label . 0)
(block-open . 0)
(knr-argdecl-intro . -)))
(c-echo-syntactic-information-p . t)
)
"Joonhwan Style")

;;
;; Customizations for all modes in CC Mode.
::
(defun my-c-mode-common-hook ()
(c-add-style "PERSONAL" joonhwan-c-style t)
(setq tab-width 4
indent-tabs-mode t
c-basic-offset 4)
(c-toggle-auto-state -1) ; disable auto-newline mode
(c-toggle-hungry-state 1) ; enable hungry-delete mode
(define-key c-mode-base-map "C-m" 'newline-and-indent)
(define-key c-mode-base-map [(control c)(return)] 'ff-find-other-file)
(c-set-offset 'substatement-open 0)
(c-set-offset 'member-init-intro '++)
(c-set-offset 'inline-open 0)
(c-set-offset 'comment-intro 0)
(c-set-offset 'statement-case-open 4)
(c-set-offset 'label 0)
(c-set-offset 'arglist-intro '++)
(hs-minor-mode 1))

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;;
;; Python mode...
;;
(setq load-path (cons "~/elisp/" load-path))
(autoload 'python-mode "python-mode" "Python editing mode." t)
(setq auto-mode-alist
(cons '("\.py$" . python-mode)
auto-mode-alist))
(setq interpreter-mode-alist
(cons '("python" . python-mode)
interpreter-mode-alist))

;;
;; bash shell in NTEmacs
;;
(defun my-shell-setup()
"for cygwin bash under emacs"
(setq exec-path (cons "C:/cygwin/bin" exec-path))
(setenv "PATH" (concat "C:\cygwin\bin;" (getenv "PATH")))
(add-to-list 'load-path "~/../elisp")
(require 'cygwin-mount)
(cygwin-mount-activate)

(setq shell-file-name "c:/cygwin/bin/bash.exe")
(setq explicit-shell-file-name shell-file-name)
(setq explicit-sh-args '("--login" "-i"))
(setq explicit-bash-args '("--login" "-i"))
(setq explicit-bash.exe-args '("--login" "-i"))
(setq shell-command-switch "-c")
(setq w32-quote-process-args t)
(setq comint-scroll-show-maximum-output 'this)
(setq comint-eol-on-send t)
(setq w32-quote-process-args ?")
(make-variable-buffer-local 'comint-completion-addsuffix)
(setq process-coding-system-alist '(("bash" . euc-kr)))
(setq tab-width 5)
(ansi-color-for-comint-mode-on) ;; *shell* buffer colorization!!!!
)
(my-shell-setup)

(add-hook 'comint-output-filter-functions
'comint-strip-ctrl-m)


;;
;; emacs-wiki and planner mode
;;
(add-to-list 'load-path "~/elisp/emacs-wiki/")
(add-to-list 'load-path "~/elisp/planner/")
(require 'emacs-wiki)
(require 'planner)
(require 'planner)

;;
;; cedet and ecb 01
;;
(add-to-list 'load-path "~/cedet-1.0beta3b/semantic")
(setq semantic-load-turn-useful-things-on t)
(load-file "~/cedet-1.0beta3b/common/cedet.el")

;; Enabling SEMANTIC minor modes. See semantic/INSTALL for more ideas.
(semantic-load-enable-code-helpers)
(add-to-list 'load-path "~/ecb-2.31")
(require 'ecb-autoloads)



;;
;; emacs customizer !!!!
;;
(custom-set-faces
;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
;; Your init file should contain only one such instance.
'(default ((t (:stipple nil :background "black" :foreground "gray75" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight light :height 90 :width normal :family "outline-굴림체"))))
'(ecb-default-highlight-face ((((class color) (background dark)) (:background "gray35"))))
'(ecb-directory-face ((((class color) (background dark)) (:inherit ecb-default-highlight-face :background "magenta"))))
'(isearch-lazy-highlight-face ((t (:background "gold4" :foreground "black"))))
'(minibuffer-prompt ((((background dark)) (:foreground "gold2"))))
'(region ((((class color) (background dark)) (:background "khaki3" :foreground "black")))))


(custom-set-variables
;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
;; Your init file should contain only one such instance.
'(auto-raise-tool-bar-buttons t t)
'(auto-resize-tool-bars t t)
'(default-input-method "korean-hangul3")
'(default-korean-keyboard "3" t)
'(ecb-compile-window-height 10)
'(ecb-directories-menu-user-extension-function nil)
'(ecb-history-menu-user-extension-function nil)
'(ecb-methods-menu-user-extension-function nil)
'(ecb-options-version "2.31")
'(ecb-source-path (quote ("d:/coderesource" "c:/program files/microsoft visual c++ toolkit 2003" "c:/program files/microsoft platform sdk")))
'(ecb-sources-menu-user-extension-function nil)
'(ecb-tree-buffer-style (quote image))
'(ecb-tree-indent 2)
'(emacs-wiki-charset-default "utf-8")
'(emacs-wiki-coding-default (quote utf-16le-with-signature-dos))
'(emacs-wiki-coding-map (quote ((korean-iso-8bit-with-esc "euc-kr") (utf-8 "utf-8") (mule-utf-8 "utf-8") (japanese-iso-8bit "euc-jp") (chinese-big5 "big5"))))
'(emacs-wiki-publish-url-coding-system (quote euc-kr))
'(face-default-stipple "gray3" t)
'(facemenu-unlisted-faces (quote (holiday calendar-today diary modeline region secondary-selection highlight scratch-face "^font-lock-" "^gnus-" "^message-" "^ediff-" "^term-" "^vc-" "^widget-" "^custom-" "^vm-")))
'(nil nil t)
'(semantic-default-c-path (quote ("c:/program files/microsoft visual c++ toolkit 2003/include" "c:/program files/microsoft sdk" "/usr/include" "/usr/dt/include" "/usr/X11R6/include")))
'(semanticdb-project-roots (quote ("/c/program files/microsoft platform sdk" "/c/program files/microsoft visual c++ toolkit 2003" "/d/coderesource/")))
'(tool-bar-button-margin 4 t)
'(tool-bar-button-relief 1 t)
'(tool-bar-mode nil nil (tool-bar)))


(setq exec-path (cons "~/elisp/xref" exec-path))
(setq load-path (cons "~/elisp/xref/emacs" load-path))
(load "xrefactory")

(fset 'find-next-tag "C-u256")
(fset 'find-prev-tag "C-u-256")
(global-set-key "M-]" 'find-next-tag)
(global-set-key "M-[" 'find-prev-tag)
by joonhwan | 2005/08/12 13:24 | emacs | 트랙백 | 덧글(0)
emacs와 makefile에서 사용할 cl.exe와 link.exe의 option들.
emacs+makefile을 사용하여 visual studio의 환경을 구현한다.
이때 필요한 것은 잡다한 bell&whistle도 필요하지만, 중요한 것은 컴파일러와 링커옵션이다.

[Debug시 컴파일러(cl.exe) 옵션사항]


/Od : 디버그(를 위한) 비활성화 -> 컴파일시 코드가 여기저기로
움직여지는 최적화 작업이 이루어지지 않으므로 컴파일 속도가 빨라진다.

/I "INCLUDE할 디렉토리명" : 추가 include 경로명(여러개가 올 수 있음)

/D "WIN32"
/D "_WINDOWS"
/D "_DEBUG" : preprocessor상수를 정의한다. 반드시 WIN32와 _WINDOWS가
있어야 하는 것 같다.

/Zi : /Z{d|7|i|I}옵션은 기본적으로 디버깅 정보를 어떻게 처리할
것인가와 연관된 옵션이다. /Zi옵션은 쉽게 디버깅할 수
있는 바이너리를 만드는 옵션이다. pdb파일에 모든 디버깅
정보가 들어가므로, 컴파일되는 obj파일은 크기가
작아진다. 비쥬얼 스튜디오는 디버그용 바이너리에
기본적으로는 /Zi가 아니라, /ZI를 사용하는데, 이는
디버깅중에 편집을 한다음 다시 계속 디버깅할 수 있는 EDIT
and CONTINUE(E&C)기능을 활성화한다(주의: 이런경우, 모든
#pragma optimize문이 비활성화된다. 대부분의 최적화는
E&C와는 항상 배타적일 수밖에 없다)

/Fd"filename" : /Zi 옵션을 사용하면 프로그램 데이터베이스(PDB) 파일가
자동으로 만들어지는데, 기본 이름이 VCx0.pdb가
된다(여기서 x는 사용하는 Visual C++의 주 버전). 이 경우
/Fd 옵션을 사용해 특정파일명으로 만들 수 있다.

/EHsc : /EH옵션은 "예외처리모델"에 대한 옵션을 설정한다. /EHsc는
/EHs(동기 예외 처리 모델)와 /EHc(extern "C"함수는 예외를
발생하지 않는다고 가정하고 컴파일링할 수 있게됨)의 두가지
옵션을 포함한 형태. --> 이렇게 하면, 예외발생시 c++객체의
소멸자가 stack unwind시에 호출된다고 함. /EHsc로 묶어서
생각하는 것이 좋음.

/W3 : /Wn은 기본적으로 wanrning level의 수준을 결정한다. /W0은
경고를 사용하지 않으며, /W4는 최고수준의 경고를 한다. 새로운
프로젝트의 경우 /W4를 사용하면 발견하기 힘든 결함을 사전예방할
수 있으나, 기본적으로는 /W3으로 설정되는 것이 보통이다.
/W4보다 /Wall을 사용하면 모든 경고가 뜨게 된다. 이 옵션은
소스코드내에서 종종 사용하게 되는 #pragma warning에 영향을
주지 않으므로, 소스코드 수준에서 특정 waning을 제어할 수도
있다. pch파일의 경우 컴파일시 사용된 warning level이
컴파일시에 다시 적용되는 경우가 있으므로 주의.

/c : 컴파일만 하고 링크는 진행하지 않는다. microsoft의 컴파일러는
링커의 역할 까지 할 수 있다(사실은 내부적으로 link.exe를
호출하는 것 같다)

/FD : 이 옵션은 DevEnv IDE에서만 사용되는 옵션으로 cl /? 해도
나오지 않는 특수한 옵션이다. idb파일에 각 소스파일의 헤더
의존성을 기록하여, 컴파일시에 최소빌드가 이루어질 수 있도록
한다. 커맨드라인에서는 /Gm 옵션을 사용하면 비슷하다고 되어
있는데 잘 모르겠다. MSDN에서는 클래스정의가 바뀌지 않으면
수정된 .h 파일이 있더라도 재빌드를 하지 않는다고 하는데..


[Debug 리소스컴파일러(rc.exe) 옵션사항]

/d"_DEBUG"
/D"define" : preprocessor의 정의. cl.exe과 같다. debug시에는 오직
"_DEBUG" 전처리자만 정의된다. 단, RC_INVOKE는 옵션으로
주지 않아도 자동적으로 정의된다. 리소스 파일(.rc)은
cl.exe와 rc.exe가 헤더를 공유하는 경우,이를 내부적으로
활용하는 경우가 많다.

/I"include경로" : ("l"은 영문자 "아이"이다)cl.exe과 같은
개념. 마찬가지로 INCLUDE 환경변수를 참조하고 있다.

/l codepage : ("l"은 영문자 "엘"이다). codepage에는 MS에서 미리 지정한
각 나라별/문자별 16비트 정수값이 들어간다. 예를들어 -l
0x409 를 하면 English(U.S)를 선택한 것이며, 이는 rc파일에
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 를 입력하거나
#pragma code_page(0x409)를 한 것 과 같은 효과다. 참고로
한국어는 0x412이다.

/fo"resname" : rc를 컴파일하여 생성될 res파일의 파일이름을
지정한다. 이 옵션이 없다면, rc파일이름에 res확장자만
붙는다.


[Debug시 링커 옵션사항]

/INCREMENTAL:no : 증분링크(incremental link)는 먼저 링크된 바이너리
부분을 최대한 살리면서, 이후 소스레벨에서의
변경사항들이 추가적으로 링크되게 함으로써 링크 속도를
높이는 것 같다(이전에 링크되었던 상황은 ilk화일에
저장된다). 이 옵션을 사용함으로써 증분링크를 죽이고
패딩/썽킹을 하지않는다. 이 옵션을 사용하게 되면,
/ZI컴파일러 옵션(E&C)이 자동적으로 죽는다. (LNK4075)

/DEBUG : exe파일이나 dll파일에 대한 디버깅정보를 만든다. pdb에
디버깅 정보를 보관하고, 해당 프로그램의 후속
빌드과정중에 pdb파일을 갱신한다. 디버깅을 위해 만든
exe나 dll에는 해당 바이너리의 pdb파일의 이름과 경로가
포함된다. 생성되는 pdb는 프로그램의 기본이름을 따서
만들지만, 따로 이름을 지정하기 위해서는 /PDB옵션을
사용한다.

/PDB:"pdbname" : 링커가 만드는 pdb파일이름을 지정한다. /DEBUG옵션이
없는 경우에 이 옵션은 무시된다.


/SUBSYSTEM:WINDOWS : 하위시스템을 지정하는 옵션인데, 콜론뒤에 오는
것에는 CONSOLE, WINDOWS, WINDOWSCE 등등이
있다. 사실, main(or wmain)이나 WinMain(or wWinMain)
이 정의되어 있는 경우에는 이에 따라 각각 CONSOLE과
WINDOWS로 하위시스템이 자동결정되기는 한다.

/MACHINE:x86 : 프로그램의 대상 플렛폼을 정하는 옵션. 대개 obj파일내에
있는 정보를 통해 링커는 대상 플렛폼을 유추할 수
있다. 하지만, 오류가 생기는 경우도 있으므로, 이 옵션을
적절히 설정하는 것도 괜찮다. 보통 x86일 것인데.. ARM이나
MIPS칩을 사용하는 경우에는 독특한 이름을 새겨넣어야 할것

/LIBPATH:pathname : 이 옵션 여러개를 사용해서 링크에 들어가는
목적파일들의 검색 경로를 넣을 수 있다. cl의 /I
옵션과 유사하다. LIB 환경변수를 사용하면 굳이 이
옵션을 사용할 필요 없다.


[Debug시 MIDL 옵션사항]

midl /nologo /app_config /out "common"
/h pizza2.h /proxy pizza2_p.c
/iid pizza2_i.c /dlldata pizza2_dlldata.c common/pizza2.idl
Processing commonpizza2.idl

/app_config : 언제나 들어가는 옵션. Application-Configuration File의
키워드를 사용할 수 있다던데... 잘 모르겠음.

/out path : 출력파일들이 나가는 경로를 설정

(* 다음에서 괄호안은 옵션이 없을때의 디폴트명)
/h filename : 헤더 파일의 이름(idl이름_h.
/proxy filename : 인터페이스 프락시 파일의 이름(idl이름_p.c)
/iid filename : 인터페이스 uuid파일의 이름(idl이름_i.c)
/dlldata filename : 프락시dll에 대해 생성된 data dll파일의 이름
(dlldata.c)

--- 다음에는 Release모드를 알아보자 -_-; ---
by joonhwan | 2005/08/04 04:35 | visual | 트랙백(3362) | 덧글(27)



늦깍이 프로그래머의 블로그입니당.
by joonhwan
카테고리
전체
emacs
visual
잡담
agile programming
이전블로그
more...
이글루링크
최근 등록된 덧글
http://pyuydmnd.so..
by koko at 11/16
http://dbxasnps.bo..
by koko at 11/16
http://prich.mobi/user..
by koko at 11/16
http://kyabahp.jp/..
by koko at 11/16
http://dbmcsnzx.ka..
by koko at 11/16
http://a32.chip.jp/xijix..
by koko at 11/16
http://ih.39.kg/plijpppp..
by koko at 11/16
子育て中の主婦でも時..
by koko at 11/16
http://pe-ji.com/no...
by koko at 11/16
役に立つ<a href="http:..
by koko at 11/16
rss

skin by joonhwan