2009-10-05 3 views
5

저는 현재 어떤 프로젝트 구성에 따라 다른 프로젝트 종속성을 갖고 싶습니다.각 프로젝트 구성마다 다른 프로젝트 종속성을 갖는 방법은 무엇입니까?

예를 들어, 내가 구축 및 릴리스 구성에서 SomeTestLib.vcproj을 연결하고 싶지 않아,하지만 난 빌드 및 디버그에 링크하고 싶습니다.

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

그러나이 경우, 디버거 및 인텔리이 SomeTestLib 작동하지 않습니다 :

하나 개의 솔루션, 즉 그렇다고 작동, 조건부 컴파일 매크로를 사용하는 것입니다.
사용할 수있는 .sln 또는 .vcproj 해킹이 있습니까?
감사합니다. Visual Studio에서

답변

6

Google에서 며칠 동안 검색 한 후 마침내이 문제에 대한 해결책을 찾아 내고이 문제에 대한 해결책을 제시 한 VS 개발자를 불렀습니다. 실제로이 문제를 해결하기 위해 여러 가지 일을 시도했습니다.).

분명히 IDE는 특정 구성에서 특정 라이브러리에 대한 빌드를 사용하지 않도록 설정하고 해당 프로젝트의 출력을 사용하는 프로젝트의 링커 명령 줄에 해당 프로젝트의 출력을 추가하지 않도록 충분히 똑똑하지 않습니다. 나는 당신이 이것을 알고 있다고 확신합니다.

그러나 라이브러리 프로젝트의 출력 줄을 종속 프로젝트의 명령 줄에 붙여 넣기 때문에 출력 줄을 ""로 설정하면 종속 프로젝트의 링커 명령 줄에 NOTHING이 추가됩니다!

희망,이 문제는 미래의 Visual Studio에서 해결 될 것입니다. 내가 가장 좋아하는 IDE이기 때문에 나는 낙관적 인 채로 있고, 나는 그것이 지원하는 기능에 항상 감명 받았다. 그러나, 내가 본 VS 도움말 스레드 중 일부는이 버그가 "설계 상"이라고 말하여 아마도 수정하지 않을 것입니다. 그래도 충분히 쉽게 할 수 있습니다.

은 어쨌든, 요약 :

  • 솔루션 탐색기에서 라이브러리 프로젝트를 마우스 오른쪽 단추로 클릭하고 "속성"을 클릭합니다.
  • 라이브러리 프로젝트에서 빌드하지 않는 "구성/플랫폼"쌍으로 전환하십시오.
  • "구성 속성 -> 사서 -> 일반"을 선택하십시오.
  • "출력 파일"의 경우 ""(괄호, 공백, 닫는 괄호)를 입력하십시오.
  • 확인을 클릭하십시오.

사용하지 않도록 설정 한 라이브러리 프로젝트를 빌드하거나 치료하면이 해결 방법으로 오류가 발생합니다. 솔루션을 구축 한 경우 장애가 발생한 구성에서는 건너 뜁니다. 따라서 오류가 발생하지 않습니다.

희망이 도움이됩니다.

다니엘

+0

고마워, 이거 멋지다! 또 다른 문제 : 연결하려는 종속성이 .dll 인 경우 가져 오기 라이브러리의 이름을 ""로 설정할 수 있으며 무시됩니다. 이 옵션은 링커 -> 고급 -> 라이브러리 가져 오기 아래에 있습니다. – k0dek0mmand0

0

는 각 빌드 구성은 프로젝트의 속성 자체 목록을 유지합니다. 원하는 구성을 빌드하는 데 lib를 추가하십시오. 그냥 마우스 오른쪽 솔루션을 선택 속성을 클릭하십시오 "모든 구성"

+0

저는 솔루션의 일부인 프로젝트에 대해 실제로 묻습니다. 외부 lib가 아닙니다. 네가 제안하는 옵션을 알고있어. 내가 성취하고자하는 것은 특정 솔루션 구성에서 프로젝트 종속성을 비활성으로 표시하는 것입니다. – k0dek0mmand0

0

에 추가하지 마십시오. 솔루션 속성 페이지는 오른쪽 페이지에서

는 디버그, 릴리스 빌드 구성 및 빌드로 표시 확인란을 선택하여 모든 빌드 유형을 선택할 수 있습니다 구성 여기

>>> 구성 속성을 선택합니다 .. 표시됩니다.

+0

내가 올바르게 이해하면, 프로젝트를 여기에서 체크하지 않으면 빌드가되지 않을 것입니다. 그러나이 검사되지 않은 프로젝트가 프로젝트 종속성으로 표시된 경우 링커에서 불만을 제기합니다 (SomeTestLib.lib을 찾을 수 없습니다). – k0dek0mmand0

+0

이미 빌드되어 있고 어셈블리가 동일한 디렉토리에있는 경우 아닙니다. 프로젝트를 빌드 할 때부터 GAC에 설치된 프로젝트가 모두 해당 어셈블리의 개인 폴더에 복사됩니다. 그러나 다른 어셈블리에 종속되어 있고 해당 어셈블리의 소스가 변경되면 모든 종속성이 먼저 만들어집니다. –

+0

좋아요,하지만 Release 구성에서 SomeTestLib을 빌드하고 싶지는 않습니다. 그게 전부입니다. :) – k0dek0mmand0

2

이 종속 프로젝트의 링커/일반/링크 라이브러리 의존성 속성을 해제하고 관련 구성에서 링커 입력에서 라이브러리를 넣어 가능합니다.

그것은 프로젝트 참조가 덜 유용하게 만 가능한 것입니다.

1

프로젝트 속성에서 대신 응용 프로그램/라이브러리의 유틸리티로 구성 유형 설정 -> 링커 - -> 일반 ..

0

주요 프로젝트에서이 구성 속성으로 이동> 입력에서 "특정 라이브러리 무시"라는 제목의 섹션은 당신이 원하는 라이브러리를 추가합니다 (예 : .lib). 다른 lib/dll을 무시한 경우를 제외하고는 다른 구성에서이 작업을 다시 수행하십시오.

마지막으로 두 구성에 대해 각각의 프로젝트 빌드를 원하지 않는 경우 솔루션 -> 프로젝트 종속성 -> [주/최상위 프로젝트 선택] -> 빌드하지 않으려는 프로젝트 선택 취소/무시.

이 방법은 원하는 경우 각 프로젝트를 수동으로 빌드 할 수 있지만 구성을 전환하고 원하는 lib/dll 만 빌드/사용할 수 있다는 장점이 있습니다.