C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[44505] Re:BDS2006 C++ Builder에서 프로젝트옵션의 Command Line 항목 관련......
박지훈.임프 [cbuilder] 1764 읽음    2006-04-15 04:09
C++빌더6에서도 컴맨드라인 옵션을 표시할 수 있습니다만 기능이 숨겨져 있었던 거구요.
2006에서 기능이 추가된 거죠. C++빌더6에서 컴맨드라인을 표시하는 방법에 대해서는 다음 문서를 참고하세요.
http://support.borland.com/entry.jspa?externalID=3876&categoryID=136

그런데.. 그렇게 에러가 나는 것은 처음 듣는 경우라서 약간 테스트를 해봤습니다. 말씀하신대로 재현이 되더군요.
아마도 C++빌더6에서 에러가 나지 않고 잘 썼던 것은, 사용하셨던 컴맨드라인 옵션이 길이의 한계 약간 안쪽이었던 게
아닌가 싶습니다. 아마, 2006에서 기본적으로 추가되는 새 옵션들이 추가되면서 그 한계를 넘어선게 아닌가 싶네요.

그런데 보여주신 컴맨드라인 문자열은 2050 바이트밖에 안되는데, 제가 테스트한 경우에는 대략 3200 바이트까지는
에러가 안나더군요. 혹시 OS의 차이로 허용 가능한 컴맨드라인 길이가 다른 게 아닌지.. 저는 윈도우2000을 쓰고 있습니다.

분명히 실무에서 문제가 생기는 부분이므로, 피해갈 방법도 생각해봤습니다. 패스 문자열을 다루는 방법으로, 패스를
줄여서 쓸 수 있는 방법이 있습니다. 예를 들어 윈도우 OS에서 패스 환경 변수에 음과 같이 축약형을 지정하면,
LIB=E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib
이 환경변수가 지정된 후부터는, 패스에 %LIB%라고 지정하면 실제로는 위에 지정한 디렉토리가 지정되는 것입니다.

예를 들어서,
%LIB%\FileStringReader
라고 지정한 것은,
E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\FileStringReader
이렇게 해석됩니다. 컴맨드라인(cmd.exe)을 열어서 실제로 테스트해보실 수 있습니다.

실제로 윈도우에는 SYSTEMROOT라는 환경변수가 기본적으로 미리 정의되어 있는데, 현재 시스템의 윈도우 디렉토리를
가리킵니다. 따라서 cmd에서 cd %SYSTEMROOT% 라고 치면, 윈도우 디렉토리가 C:\WINNT 이건 C:\Windows 이건
해당 디렉토리로 이동합니다.

그런데 BDS(그 이전의 C++빌더나 델파이에도 해당됨)에서는 %를 이용한 축약형은 지원하지 않고, 자체 포맷이 있습니다.
C++빌더나 델파이를 쓰다보면 $(BCB) / $(DELPHI) 이런 경로명을 보셨을 텐데, 이 형식이 바로 C++빌더와 델파이에서
쓰는 경로명입니다. IDE가 실행되면서 스스로 설정하는 환경변수죠. BDS2006으로 오면서 C++빌더와 델파이가 통합되어
같은 디렉토리에 설치되므로 위의 두 환경변수는 동일합니다. 거기다가 $(BDS)라는 환경변수도 추가되었는데, 마찬가지로
설치된 디렉토리를 가리킵니다.

물론 지금 우리가 필요한 사용자 정의 환경변수도 이 포맷에 맞춰서 쓸 수 있습니다. 위에서 예를 들었던 것처럼,
LIB=E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib
이렇게 지정되면, 다음과 같이 쓸 수 있게 됩니다.
$(LIB)\FileStringReader

이걸 이용하면, Poichel님의 프로젝트에서 엄청나게 긴 컴맨드라인을 아주 짧게 줄일 수 있습니다. 물론 인클루드 패스와
라이브러리 패스 양쪽 모두 지정할 수 있지요. 또 Poichel님의 컴맨드라인에서 e:\program files\borland\bds\4.0은
말씀드린 대로 이게 바로 $(BDS)이므로 그대로 치환시키면 되구요.

실제로 님의 컴맨드라인을 그대로 변환해보니, 822바이트로 줄어드는군요. ^^
-D_DEBUG -DNO_STRICT -H=$(BDS)\lib\vcl100.csm -Hc -w-par -Od -b- -k -y -v -vi- -tWM -tW -c -I $(LIB)\DateTimeControl;$(LIB)\FileStringReader;$(LIB)\FileTimeToTDateTime;$(LIB)\FTPClientService;$(LIB)\GetFormatDateTime;$(LIB)\GetLocalDiskSerialNumber;$(LIB)\GetTextFromByteSize;$(LIB)\HTTPRemoteTransfer;$(LIB)\IntToChar;$(LIB)\NamedInfoFileControl;$(LIB)\PipeLineFileCopy;$(LIB)\StandardDataStoreManager;$(LIB)\StandardFileCopy;$(LIB)\StandardRollingBuffer;$(LIB)\StandardStringBuffer;$(LIB)\StringDividerSingle;$(LIB)\StringPaster;$(LIB)\StringReplaceEngine;$(LIB)\StringSearchEngine;$(LIB)\SynchronizeFileCopy;$(LIB)\TransRateIndicator;$(LIB)\UnlimitBuffer;$(LIB)\CompareMemory;$(LIB);"e:\program files\borland\bds\4.0\include";"$(BDS)\include\dinkumware";"$(BDS)\include\vcl";"$(BDS)\Lib\Indy10";"$(BDS)\RaveReports\Lib"

주의하실 것은, LIB 환경변수를 먼저 시스템 환경변수 리스트에 설정한 후에 BDS2006을 실행시켜야 한다는 것입니다.
실행되는 모든 프로그램은 로딩될 당시의 시스템 환경변수의 스냅샷을 가질 뿐, 실행중에 변경되거나 추가된 환경변수는
알 수가 없기 때문입니다.

그럼...


Poichel 님이 쓰신 글 :
: 안녕하세요 만년초보 프로그래머 입니다 ^^;;
:
: C++ Builder 6.0 쓰다 이번에 BDS2006으로 전향해 봤습니다
: 기존에 있던 프로젝트들 컨버전 하느라 이것저것 손대고 있는데
: 문제가 발생하여 이렇게 질문 올립니다
:
: 제가 별도로 스태틱 라이브러리 형태로 소스들을 모아 라이브러리를 만들어 쓰고 있었습니다
: 이름인 즉은 CustomLibrary 였지요
:
: 문제는......
: BDS2006으로 옮겨서 커스텀라이브러리를 다시 만들었습니다
: 한 32개 정도 서비스클래스를 라이브러리로 등록한거죠
: 그랬더니 컴파일이 안됩니다
: 확인한 바에 의하면 소스 호환성 문제는 없습니다.
: 이건 어디까지나 등록 순서의 문제더군요
: 문제가 생기는 클래스의 등록 순서를 앞으로 당기면 문제가 안생깁니다
: 처음 등록부터 한 20번째 정도 까지는 이상없이 잘 됩니다
:
: 그래서 한참을 헤매다 보니 프로젝트 옵션에 Command Line 이라는 항목이 있습니다
: 20개쯤 등록하고 보니 이곳이 한가득 경로들로 써져 있더군요
:
: 아래 처럼 말이죠 -_-;;
: 아마도 Command Line 문자열 길이 제한으로 클래스 등록이 안되는걸로 보이는데요
: 이 문제를 피해갈 방법이 있을까 하고 질문 드립니다
: 6.0에서는 분명 이런 방식이 아니었는데 말이죠
: 이거 영 난감합니다
: 그럼 이만 즐프 하세요
:
: --------------------------------------------------------------------------------------------
: -D_DEBUG -DNO_STRICT -H=$(BDS)\lib\vcl100.csm -Hc -w-par -Od -b- -k -y -v -vi- -tWM -tW -c -I
: E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\DateTimeControl;E:\Lang\CPlusBuilder\
: #_KHC_Src\V_CustomLibrary\Lib\FileStringReader;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLi
: brary\Lib\FileTimeToTDateTime;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\FTPClien
: tService;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\GetFormatDateTime;E:\Lang\CPl
: usBuilder\#_KHC_Src\V_CustomLibrary\Lib\GetLocalDiskSerialNumber;E:\Lang\CPlusBuilder\#_K
: HC_Src\V_CustomLibrary\Lib\GetTextFromByteSize;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLi
: brary\Lib\HTTPRemoteTransfer;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\IntToCh
: ar;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\NamedInfoFileControl;E:\Lang\CPlusB
: uilder\#_KHC_Src\V_CustomLibrary\Lib\PipeLineFileCopy;E:\Lang\CPlusBuilder\#_KHC_Src\V_C
: ustomLibrary\Lib\StandardDataStoreManager;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrar
: y\Lib\StandardFileCopy;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\StandardRolling
: Buffer;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\StandardStringBuffer;E:\Lang\CPl
: usBuilder\#_KHC_Src\V_CustomLibrary\Lib\StringDividerSingle;E:\Lang\CPlusBuilder\#_KHC_Sr
: c\V_CustomLibrary\Lib\StringPaster;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\Str
: ingReplaceEngine;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\StringSearchEngine;
: E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\SynchronizeFileCopy;E:\Lang\CPlusBuil
: der\#_KHC_Src\V_CustomLibrary\Lib\TransRateIndicator;E:\Lang\CPlusBuilder\#_KHC_Src\V_C
: ustomLibrary\Lib\UnlimitBuffer;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib\Compare
: Memory;E:\Lang\CPlusBuilder\#_KHC_Src\V_CustomLibrary\Lib;"e:\program files\borland\bd
: s\4.0\include";"e:\program files\borland\bds\4.0\include\dinkumware";"e:\program files\borla
: nd\bds\4.0\include\vcl";"e:\program files\borland\bds\4.0\Lib\Indy10";"E:\Program Files\Bor
: land\BDS\4.0\RaveReports\Lib"
: --------------------------------------------------------------------------------------------

+ -

관련 글 리스트
44469 BDS2006 C++ Builder에서 프로젝트옵션의 Command Line 항목 관련...... Poichel 1017 2006/04/13
44505     Re:BDS2006 C++ Builder에서 프로젝트옵션의 Command Line 항목 관련...... 박지훈.임프 1764 2006/04/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.