내 C 프로젝트 코드와 외부 라이브러리를 구성하는 가장 좋은 방법은 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/26964

  •  09-06-2019
  •  | 
  •  

문제

저는 주로 OSS 기반 인 새로운 C 프로젝트를 시작하고 있습니다. 또한 SourceForge에있을 예정이며이 기회를 이용하여 이러한 종류의 코드를 구성하기위한 확립 된 모범 사례를 배우고 싶습니다. libcurl 및 libz와 같은 라이브러리를 사용하고 있으며 MinGW 및 MSYS를 사용하여 컴파일합니다.

프로 젯과 함께 사용중인 모든 라이브러리의 소스 사본을 배포 할 것이므로 소스를 다운로드하는 사람들이 의존성을 찾아서 찾을 필요가 없습니다. 라이브러리를 저장하는 디렉토리를 무엇이라고해야합니까? 지금까지 다음 사이에 망설임 :

  • lib, 라이브러리이기 때문입니다. 그러나 'lib'는 UNIX 세계에서 다른 의미를 가지고 있습니다.
  • src, 소스 파일이기 때문입니다.
  • 제 3 자, 제가 작성하지 않았기 때문입니다.

    그리고 이러한 라이브러리를 어디로 컴파일해야합니까? 시스템 루트에 간단히 구성하고 설치해야합니까, 아니면 모든 라이브러리가 컴파일되고 거기에서 링크되어야하는 디렉토리를 설정해야합니까? 분명히 이것은 내 Makefile에 영향을 미칠 것입니다.

    어떻게해야합니까? 내가 따라야 할 확립 된 규칙이 있습니까? 어딘가에 기록되어 있습니까?

도움이 되었습니까?

해결책

먼저, 외부 라이브러리의 경우 vendor를 사용하지만 이는 단지 선호 사항입니다.

둘째, 사용자 모르게 시스템 루트에 다른 라이브러리를 설치하는 것은 좋지 않다고 생각합니다.가장 중요한 것은이 라이브러리의 나중에 설치된 버전과 충돌하기 때문입니다.따라서 이러한 라이브러리에 가장 적합한 위치는 애플리케이션과 동일한 디렉토리에있을 것입니다.

이러한 라이브러리를 프로그램에 정적으로 컴파일 할 수도 있습니다.

다른 팁

이전 작업에서 표준은 3rdparty라는 디렉토리에 설치하고 바로 거기에 라이브러리를 빌드하는 것이 었습니다 (3rdparty / LIBNAME / Debug 등).

우리는 _ext 또는 _EXT 접미사 (예 : MyProject_EXT)가있는 것을 사용하여 링크하는 외부 패키지의 소스 코드를 저장하기 위해 프로젝트 외부에 있음을 나타냅니다.

나는 Peter에게 동의합니다.외부 라이브러리는 충돌을 일으킬 수 있으므로 시스템 루트에 빌드하면 안됩니다.나는 그것들을 그들의 디렉토리에 빌드 한 다음 응용 프로그램에 고유 한 / lib 디렉토리 (또는 / extlib)에 설치하고 거기에 링크합니다.

소스에 있거나 바이너리에 정적으로 연결되거나 다른 방식으로 코드와 함께 타사 소스를 제공하지 마세요 .이는 동일한 사본의 다른 사본을 방해 할 뿐이며 라이브러리에 수정이 필요할 때 업데이트되지 않습니다.사용자에게 요구 사항이 무엇인지 알려주십시오 (그리고 라이브러리의 API 변경 사항을 따라 잡으십시오!).자체 컴파일 사용자는 종속성을 확인하고 배포는 패키지가 제공되는 버전과 작동하는지 확인합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top