2010-01-07 6 views
2

별개의 C++ 프로젝트가 동일한 리포지토리의 최상위 디렉토리 또는 개별 리포지토리에 있다고 가정 해 보겠습니다. 아마도 10은 그래픽, 데이터베이스, 수학 등과 같은 것들을위한 라이브러리 프로젝트이고 2는 그러한 라이브러리를 사용하는 실제 어플리케이션입니다.여러 C++ 프로젝트의 코드베이스에서 .libs 구성하기

두 개의 응용 프로그램 프로젝트를 구성하여 .lib가 필요한 가장 좋은 방법은 무엇입니까?

  • 각 LIB 프로젝트는 자신의 디렉토리에 lib 디렉토리를 구축, 개발자가 수동으로 응용 프로그램 영역에 걸쳐 이러한 복사
  • 응용 프로그램 프로젝트가 LIB 프로젝트는 특정 경로에있을 것으로 예상 올바른 버전을 얻을 수 있는지 확인해야 공통/libs와 디렉토리가
  • 는 다른
  • 뭔가

이 C++에 초점을 맞추고 있지만, 내 생각은 매우시의 모든 프로젝트에서 사용하는

  • 그 지역 내에서 .libs를 찾아 Java 프로젝트에서 JAR을 구성하는 등 다른 언어와 밀접한 관계가 있습니다.

  • 답변

    1

    이 접근법을 제안합니다.

    코드를 루트 폴더로 구성하십시오. 코드라고 부르 자.

    이제 프로젝트 및 라이브러리를 하위 폴더 (예 : 프로젝트 및 라이브러리)로 지정하십시오.

    라이브러리를 정상적으로 빌드하고 결과 헤더 및 .lib 파일을 공유 폴더 세트에 복사하는 빌드 후 단계를 추가하십시오. 예 : Libraries \ include 및 Libraries \ lib 하위 폴더 또는 명명 규칙 (myLib.lib, myLib_d.lib)을 사용하여 다른 빌드 (예 : 디버그 및 릴리스)를 구분하여 모든 lib 참조가 절대로 혼합 될 수없는 단일 파일을 명시 적으로 대상으로하도록하는 것이 좋습니다. 실수로 lib의 잘못된 변형에 연결되면 그것은 끔찍합니다!

    또한이 폴더에 사용하는 타사 라이브러리를 복사 할 수도 있습니다.

    참고 : 구성을 유지하려면 "Utils.h"가 아닌 #include "Math \ Utils.h"를 사용하여 파일을 포함 시키십시오. 그리고 전체 수학 라이브러리의 헤더를 include 폴더의 루트에 모두 놓기보다는 include \ Math에 넣으십시오. 이렇게하면 이름 충돌없이 많은 라이브러리를 가질 수 있습니다. 또한 다른 런타임 환경에서 코드를 멀티 타겟 할 수있는 여러 버전의 라이브러리 (예 : Photoshop 7, Photoshop 8)를 사용할 수 있습니다.

    는 다음 두 가지 방법 중 하나를 사용하여 라이브러리를 참조하는 프로젝트를 설정 :)

    1 libs와 글로벌 lib 디렉토리를 사용하여 IDE/컴파일러에게/경로를 포함한다. 즉, 각 PC에서 IDE를 한 번 설정하고 어떤 프로젝트에 대해서도 lib가 어디에 있는지 지정할 필요가 없습니다.

    2) 또는 각 프로젝트가 고유 한 lib/include 경로를 사용하여 libs를 참조하도록 설정하십시오. 이렇게하면 유연성이 향상되고 모든 PC를 설치할 필요가 없지만 모든 새 프로젝트에서 동일한 경로를 설정해야합니다.

    그리고 가장 중요한 부분 (최고 개발자의 PC의 수 대 프로젝트의 수에 따라 다름) : 당신이 참조 할 때 상대 경로를 사용하는이 /가 포함 libs가. 예 : Projects \ WebApp \ WebApp.proj에서 ".. \ .."를 사용하십시오.C : \ Code \ Libraries \ Include "대신"\ Libraries \ include "를 사용하면 다른 개발자와 buildserver가 소스 코드 (C : \ Code 대신 D : \ MyWork)를 가질 수 있습니다. 언젠가 C : \에 충분한 디스크 공간이 없거나 소스 컨트롤을 분기하고자하는 개발자를 찾으면 언젠가는 물어볼 것입니다.

    +0

    * "includes/libs를 참조 할 때 상대적 paths "* ... 프로젝트에'../../ Libraries/Include'를 명시 적으로 추가하는 대신 머리말을 명시 적으로 참조하는 것이므로, Include를 이동하기로 결정하면 코드를 깨뜨리는 일이 없습니다. –

    +0

    AppX가 사용할 때 어떻게됩니까? DatabaseUtils의 HEAD 버전이지만 AppY는 동일한 프로젝트의 r1234 이후 버전에 대해서는 작동하지 않습니다. 내가 boost1.2.3 및 boost1.2.4를 별도의 프로젝트로 말하고 싶을 때 솔루션이 정상적으로 작동합니다. 자주 uti lity 프로젝트는 아직 개발 중이며 새로운 변경 사항은 이전 응용 프로그램의 기능을 손상시킵니다. –

    +0

    @gf : 내가 말한 의미는 ./../Libraries/Include가 INCLUDE_PATH에 있지만, #include는 다른 라이브러리 (예 : #include "Math \ Utils.h")의 하위 폴더를 사용합니다. 그렇지 않으면 하나의 폴더에 백만 개의 헤더를 넣어야하고 이름 충돌이있는 여러 파일이 생깁니다 (예 : 각 라이브러리에서 여러 가지 용도로 사용되는 "types.h") –

    관련 문제