2011-09-28 4 views
1

나는 현재 자신의 중간 파일 (OBJ, PCH, ...)C++ 프로젝트간에 중간 파일 공유?

을 공유하는 것이 (정확히 같은 컴파일러 설정이 ) 두 가지 기본 비주얼 C++ 프로젝트를 수 있는지 알아 내려고 노력하고있어

예는 데 도움이 될 것입니다

을이 정상적인 설정입니다 :

PROJECTS \ P1 \ p1.vcproj; p1.cpp; ... 
       \ Release_Intermediate_Dir \ p1.obj 
             \ tool1.obj 
     \ P2 \ p2.vcproj; p2.cpp; ... 
       \ Release_Intermediate_Dir \ p2.obj 
             \ tool1.obj 
     \ COMMON \ tool1.cpp; ... 

어떤이 설정에 대해 :

PROJECTS \ P1 \ p1.vcproj (uses: p1.cpp; p1_main.cpp) 
       \ p1_test.vcproj (uses: p1.cpp; p1_test.cpp) 
       \ Release_Intermediate_Dir \ p1.obj  (used by both projects p1 and test) 
             \ tool1.obj 
             \ p1_main.obj (only p1.vcproj) 
             \ p1_test.obj (only p1_test.vcproj 
     \ COMMON \ tool1.cpp; ... 
,

동일한 중간 폴더를 두 개의 C++ 프로젝트에 사용할 수있어 obj 파일을 직접 공유 할 수 있습니까?

아니면 항상 정적 lib 프로젝트가 추가로 필요합니까? (지금까지 내가 이해, 정적 lib 디렉토리 obj 파일 just a container입니다.)


가 왜 이렇게할까요?이 블로그 게시물을보십시오 : Writing Unit Tests in Visual Studio for Native C++.

정적 실행 파일은 두 개의 다른 실행 파일 (주 함수 인 경우)을 사용하기 위해 정적 라이브러리를 사용합니다. (관리 된/CLI 관련 정보는 잊어 버려야합니다.) 이는 솔루션에 3 개의 프로젝트 (세 개의 프로젝트를 유지 관리해야 함)가 있다는 것을 의미합니다. 동일한 컴파일 설정으로 동일한 코드를 공유하지만 다른 주/시작 프로그램 장비.

답변

1

두 프로젝트에 동일한 컴파일 플래그를 적용하고 프로젝트 A의 전제 조건을 프로젝트 B의 전제 조건으로 만들면 B에서 모든 자유도가 제거됩니다. B 만 단독으로 컴파일 할 수있는 가능성은 없으며 링크에 B 가장 쉬운 방법은 B에서 A 로의 테스트를 병합하고 모든 것을 하나의 프로젝트로 만드는 것입니다 (솔직하게 말해서).

automake 용어에서 B의 단위 테스트를 check_PROGRAMS로 선언하면 프로그램 검사 용으로 만 컴파일됩니다. Visual C++ 전문가는 아니지만 깨끗한 솔루션이며 어떻게 든 VC++로 수행 할 수 있어야합니다.

부록 : 하나 개 프로젝트의 전체 코드베이스 (생산 코드, 공통 라이브러리, 테스트)와

noinst_LTLIBRARIES = libthings-to-test.la libthings-not-tested.la 
bin_PROGRAMS = production 
check_PROGRAMS = unit_test_a 

production_SOURCES = main.cpp 
production_LDADD = libthings-to-test.la libthings-not-tested.la 
unit_test_a_SOURCES = test.cpp 
unit_test_a_LDADD = libthings-to-test.la 
libthings_to_test_la_SOURCES = foo.cpp bar.cpp baz.cpp 

, 즉 하나 개의 단위 : Automake의 말투를 명확히하기 위해,이 프로젝트는, 예를 들어 같을 것이다 구성되고 배포되며 단일 버전 번호가 붙습니다. 최종 사용자/배포자가 설치하면 production.exe이라는 단일 프로그램이 링크됩니다. make all으로 컴파일하면 편의 라이브러리와 필요한 객체가 빌드 디렉토리에 컴파일되고 make check이 호출되면 단위 테스트에만 필요한 객체가 컴파일되고 프로덕션 코드가 링크되고 테스트가 실행됩니다. 다시 말씀 드리지만, 저는 이것을 Microsoft Speak로 번역 할 수 없습니다.

+0

사실 대칭 관계 IMHO입니다. 두 프로젝트 모두 코드를 공유합니다. (컴파일 컴파일 결과와 동일합니다.)하지만 링커는 각각 다른 링크를합니다. 나는 automake에 익숙하지 않다. 당신이 말하는 기능에 대한 링크를 추가 할 수 있을까? –

+0

나는 automake 설명서가 그렇게 구체적이지 않은 것을 두려워한다.이것이 automake에서 어떻게 해결 될지 예제를 추가했습니다. – thiton

관련 문제