2011-08-10 2 views
2

다른 라이브러리들 중에서도 libcurllibxml2에 대한 연결이 필요합니다. 우리는 이러한 관념을 관리하기위한 본질적으로 두 가지 전략을 갖고있는 것으로 보입니다.빌드 시스템에 어떤 종속성이 설치되어 있다고 가정 할 수 있습니까?

  1. 각 개발자에게 해당 라이브러리를 "일반적인"위치에 설치하도록 요청하십시오. /usr/lib 또는

  2. 프로젝트 소스 트리의 전용 폴더 아래에 이러한 라이브러리에 대한 소스를 포함하십시오.

접근법 1은 모든 사람이 해당 라이브러리가 시스템에 설치되어 있는지 확인해야하지만 많은 오픈 소스 프로젝트에서 사용되는 접근 방법 인 것으로 보입니다. 그러한 프로젝트에서 빌드는 해당 라이브러리가 누락되어 실패 할 것임을 감지합니다.

접근법 2를 사용하면 일부 경우 프로젝트 트리가 관리하기 어려울 정도로 커지고 컴파일 시간이 훨씬 길어질 수 있습니다. 또한,이 접근법은 분명히 너무 멀리 취할 수 있습니다. 예를 들어 프로젝트 트리 아래에 컴파일러를 두지 않을 것입니다 (맞습니까?).

외부 의존성에 대한 우수 사례는 무엇입니까? 모든 개발자가 특정 라이브러리를 설치하여 프로젝트를 구축 할 수 있습니까? 또는 프로젝트 트리에 모든 종속성을 포함하는 것이 더 나은 것으로 간주됩니까?

답변

1

코드에서 정확한 위치를 신경 쓰지 마십시오. 그것들을 찾는 것은 공통적 인 경우에 사용 된 컴파일러/링커 (또는 변수를 설정함으로써 사용자)가 처리해야합니다. 매우 드문 종속성 (또는 사용자 정의/수정 된 파일이있는 파일)의 경우 소스에 파일을 포함시킬 수 있습니다 (라이센스 등으로 인해 가능하면 가능).

좀 더 편리하게 사용하려면 구성 파일 (예 : configure 또는 CMake)을 사용하여 사용중인 빌드 파일을 설정/작성해야합니다. 예를 들어 CMake는 옵션으로 다른 패키지 (예 : libcurllibxml2)를 선택적으로 설정할 수 있습니다. 프로젝트를 빌드 할 때 프로젝트를 찾을 것입니다. 실패하면 사용자에게 묻습니다. 이는 추가 단계이므로 건물을 좀 더 복잡하게 만들지 만, 더 쉽게 다운로드 (더 작은 소스)하고 더 쉽게 업데이트 할 수 있습니다 (프로그램을 다시 빌드하면됩니다). 사용되는 특수/희귀/사용자 정의 물건이 있다면

그래서 일반적으로 내가 접근, 접근 방법 (1)에 따라 것 2.

0

정상적인 방법은 해당 종속성을 갖고 개발자가 설치하도록하는 것입니다. 나중에 프로젝트가 .deb 또는 .rpm으로 패킷 화되는 경우 해당 패킷에 각각의 라이브러리가 설치되어야하며 원본 패킷의 패킷은 -devel 개가 종속되어 있습니다.

0

모범 사례가 소스 트리에서 외부 라이브러리를 포함 하지입니다 - 대신 프로젝트 루트에 INSTALL이라는 텍스트 파일을 포함하십시오.이 파일은 프로젝트 빌드에 대한 지침을 제공하며 최소 버전을 포함하여 라이브러리 종속성 목록을 포함합니다.

관련 문제