2008-09-05 5 views
3

작성한 응용 프로그램에 대해 라이브러리를 사용하거나 배포하는 경우에는 모든 사용자 관행에 대해 궁금합니다.디버그 빌드가있는 라이브러리 관리/사용 대 릴리스 빌드

우선 응용 프로그램을 개발할 때 디버그 또는 릴리스 버전의 라이브러리를 링크합니까? (응용 프로그램을 디버그 모드로 실행하는 경우)

배포하기 직전에 릴리스 모드로 앱을 실행하면 어떤 라이브러리를 사용합니까?

디버깅 버전과 릴리스 버전 라이브러리 간의 전환은 어떻게 수행합니까? 수동으로 하시겠습니까? 매크로를 사용합니까, 아니면 매크로가 무엇입니까?

답변

3

내가 먼저 요구 사항은 라이브러리에서 필요한 결정할 것 : 해제/

  1. 디버그
  2. 유니 코드 지원이 결정은 다음을 수
  3. 등등 ..

자신이나 다른 라이브러리 사용자가 필요로하는 각 조합에 대한 구성을 작성하십시오.

컴파일 및 링크 할 때 라이브러리와 실행 파일을 사용되는 구성에 따라 일관성있게 유지하는 것이 중요합니다. 즉, 연결시 릴리스 & 디버그를 섞어 쓰지 마십시오. Windows/VS 플랫폼에서 디버그 & 릴리스 라이브러리가 실행 파일 내에 혼합되어 있으면 미묘한 메모리 문제가 발생할 수 있음을 알고 있습니다.

Brian은 Visual Studio에 언급 했으므로 Configuration Manager를 사용하여 빌드해야하는 각 구성을 원하는 방식으로 설정하는 것이 가장 좋습니다.

예를 들어 우리 프로젝트에서는 빌드 할 실행 파일에 따라 다음 구성을 사용할 수 있어야합니다.

  1. 디버그 + 유니 코드
  2. 디버그 + ASCII
  3. 릴리스 + 유니 코드
  4. 릴리스 + ASCII이 특정 프로젝트의 사용자

는 그들의 실행 요구 사항에 맞게 구성 관리자를 사용하여 프로젝트의 사용 가능한 구성.

매크로 사용과 관련하여 함수의 디버그 또는 릴리스 버전이 링크되는 것과 같이 요구 사항에 대한 컴파일 시간 결정을 구현할 때 광범위하게 사용됩니다. VS를 사용하는 경우 사전 처리기 정의 속성을보고 다양한 매크로가 정의 된 방식을 볼 수 있습니다. _DEBUG _RELEASE, 이것은 구성이 컴파일 된 것을 제어하는 ​​방법입니다.

프로젝트를 컴파일/링크하는 데 사용하는 플랫폼은 무엇입니까?

편집 : 업데이트 된 댓글 확장

구성 관리자 옵션을 사용할 수없는 경우 다음 내가 프로젝트에서 다음 속성을 사용하는 것이 좋습니다 :

  • 링커 ->추가 라이브러리 디렉토리 또는 링커 ->입력

매크로 사용 $(ConfigurationName)은 적절한 라이브러리 구성과 연결합니다. 디버그/릴리스.

$(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.lib 
  • 빌드 이벤트 또는 사용자 지정 빌드에 종속 프로젝트에서 필요한 라이브러리 파일 (들) 전 (또는 후)의 사본을 실행 단계를 구성 등록

구축 발생합니다.

xcopy $(ProjectDir)\..\third-party-prj\$(ConfigurationName)\third-party.dll $(IntDir) 

매크로 $(ProjectDir)

현재 프로젝트의 위치에 대한 치환 동작 현재 프로젝트에 대해 발생하는 원인이된다. $(ConfigurationName) 매크로가 현재 선택된 구성 (기본값은 Debug 또는 Release)으로 대체되어 현재 구성중인 구성에 따라 올바른 항목을 복사 할 수 있습니다.

프로젝트 구성에 일반 명명 규칙을 사용하면 $(ConfigurationName) 매크로를 사용할 수 있으므로 도움이됩니다. 그렇지 않으면 단순히 고정 된 문자열을 사용할 수 있습니다.

0

저는 VS를 사용합니다. 내가하는 방식은 프로젝트의 참고 문헌을 통해 필요한 라이브러리입니다. 기본적으로 프로젝트 로딩 시간에 특정 라이브러리를 찾을 폴더를 지정합니다. 나는 가능한 한 프로젝트 독립적이거나 재사용 가능하도록 나의 도서관을 개발한다. 그러므로 그들은 그들 자신의 모든 프로젝트입니다. 그래서 특정 프로젝트에 필요한 라이브러리의, 내 "svn"폴더 트리에 내 "src"폴더와 같은 수준에서 "3rdParty"또는 "libs"폴더를 만듭니다. 릴리스 된 라이브러리 만 사용하는 경향이 있지만 알 수없는 문제가 발생하여 디버그로 전환하려면 수동으로 "lib"폴더에있는 파일의 디버그 버전을 복사하고 프로젝트를 다시로드하십시오.

나는 내 svn 트리에서 디버그 및 릴리스 된 버전을 모두 유지해야합니다 확실하지 오전. 그들은 자신의 프로젝트이기 때문에, 다른 프로젝트의 svn 트리에 그들을 유지하는 것은 옳지 않습니다. 그들은 언제든지 장애없이 다시 지을 수 있습니다.

그리고 나서 스위치를 만드는 방법을 찾고 싶었습니다 ... 음 ... 기본적으로 자동으로 작동하지만, 실제로는 자동으로 작동하지 않습니다. 릴리즈 된 파일과 디버그 파일 사이에서 수동으로 파일을 전환하는 것이 옳지 않다고 생각합니다. 어쩌면 나는 아직 그것을 찾지 못했지만, 내가 좋아할만한 것은 다음과 같이 할 수있는 옵션이다 : "stack.dll"라이브러리는 "...... \ 3rdParty \"에서 릴리스와 "... ... \ 3rdPartyD \ "를 디버그합니다.

내가 알지 못하는 것 그 무엇이라도 있습니다. 너는 무엇을 제안 하는가? 라이브러리는 외부 프로젝트입니다. 거기에 내장 된 파일은 완전히 다른 곳에 있습니다. 실제로 다른 프로젝트를 체크 아웃하고, 빌드하고, 다른 복사본이 필요한 경우 빌드 된 라이브러리를 복사해야하므로 실제로 생각해보십시오. 너 어떻게 그걸 만들었 니?