문제

저는 C++ 게임 프로젝트용 빌드 환경을 설정하는 중입니다.우리의 주요 요구 사항은 게임 코드뿐만 아니라 해당 종속성(Ogre3D, Cegui, Boost 등)도 빌드할 수 있는 능력입니다.또한 우리 개발팀은 다양한 운영 체제를 사용하는 구성원으로 구성되어 있기 때문에 Windows뿐만 아니라 Linux에서도 빌드할 수 있기를 바랍니다.

Ogre3D 사용 CMake 빌드 도구로 사용됩니다.이것이 바로 우리가 지금까지 프로젝트를 CMake에 기반을 둔 이유입니다.CMake가 라이브러리를 찾을 수 있으므로 각 팀 구성원 시스템에 모든 종속성을 수동으로 설정하면 완벽하게 컴파일할 수 있습니다.

문제는 종속성을 자동으로 설정하는 실행 가능한 방법이 있는지 여부입니다.Java 개발자로서 저는 Maven에 대해 알고 있지만 C++ 세계에는 어떤 도구가 존재합니까?


업데이트: 좋은 답변과 링크 감사드립니다.앞으로 며칠 동안 CMake부터 시작하여 우리의 요구 사항을 충족하는 것이 무엇인지 확인하기 위해 몇 가지 도구를 시험해 볼 것입니다.저는 실제로 지금까지 autotools를 사용해 왔으며 문서가 마음에 드는 만큼(오토북은 매우 잘 읽혀집니다), autotools가 Windows에서 기본적으로 사용되지는 않을까 걱정됩니다.

여러분 중 일부는 일부 IDE에서 종속성 관리를 처리하도록 제안했습니다.우리는 가능한 모든 기술을 사용하여 순수한 Vim부터 완전히 발전된 Eclipse CDT 또는 Visual Studio까지 코딩하는 개인들로 구성되어 있습니다.CMake에서는 기본 프로젝트 파일을 생성하는 기능을 통해 어느 정도 유연성을 사용할 수 있습니다.

도움이 되었습니까?

해결책

최신 Cmake 2.8 버전에는 새로운 것이 있습니다. 외부 프로젝트 기준 치수. 이를 통해 코드를 다운로드/체크 아웃하고 메인 빌드 트리의 일부로 구성 및 빌드 할 수 있습니다. 또한 종속성을 설정할 수 있어야합니다.

저의 작업 (의료 이미지 처리 그룹)에서 우리는 CMAKE를 사용하여 모든 자체 라이브러리 및 응용 프로그램을 구축합니다. 프로젝트 간의 모든 종속성 (XML 데이터베이스에 정의)을 추적하는 사내 도구가 있습니다. 대부분의 타사 라이브러리 (Boost, QT, VTK, ITK 등)는 각 시스템마다 한 번 빌드되며 (MSWIN32, MSWIN64, LINUX32 등) 버전 제어 시스템에서 Zip-Files로 구성됩니다. 그런 다음 CMAKE는 개발자가 작업중인 시스템에 따라 올바른 ZIP 파일을 추출하고 구성합니다.

다른 팁

나는 지난 몇 달 동안 내가 참여한 여러 프로젝트에서 GNU Autotools(Autoconf, Automake, Libtool)를 사용해 왔고 그것이 훌륭하게 작동한다고 생각합니다.사실 구문에 익숙해지는 데 약간의 시간이 걸리지만 Python 스크립트, C 라이브러리 및 C++ 애플리케이션의 배포가 필요한 프로젝트에서 성공적으로 사용했습니다.제가 처음 여기에 비슷한 질문을 했을 때 도움이 되었던 몇 가지 링크를 알려드리겠습니다.

  • GNU Autotools 페이지 시스템 전체에 대한 최상의 문서를 제공하지만 상당히 장황합니다.
  • Wikipedia에 페이지가 있습니다 모든 것이 어떻게 작동하는지 설명합니다.Autoconf는 컴파일하려는 플랫폼을 기반으로 프로젝트를 구성하고, Automake는 프로젝트에 대한 Makefile을 빌드하며, Libtool은 라이브러리를 처리합니다.
  • Makefile.am 예 그리고 구성.ac 예 시작하는 데 도움이 될 것입니다.

추가 링크:

  1. http://www.lrde.epita.fr/~adl/autotools.html
  2. http://www.developingprogrammers.com/index.php/2006/01/05/autotools-tutorial/
  3. http://sources.redhat.com/autobook/

확실하지 않은 한 가지는 GNU Autotools용 Windows 래퍼 유형입니다.Cygwin 내에서 사용할 수 있다는 것을 알고 있지만 실제로 Windows 플랫폼에 파일과 종속성을 배포하는 경우 Windows MSI 설치 프로그램(또는 Visual Studio 내에서 프로젝트를 패키지할 수 있는 프로그램)을 사용하는 것이 더 나을 것입니다.

종속성을 배포하려는 경우 다른 하위 디렉터리에 설정할 수 있습니다. 예를 들어 다음과 같습니다. libzip, 해당 라이브러리를 빌드할 특정 Makefile.am 항목이 있습니다.당신이 수행할 때 설치하다 라이브러리는 다음 위치에 설치됩니다. lib 구성 스크립트가 사용해야 한다고 결정한 폴더입니다.

행운을 빌어요!

암시 적 종속성 (헤더 파일에서)을 자동으로 추적하고 크로스 플랫폼이며 생성 된 파일 (예 : 셰이더 정의)에 대처할 수있는 몇 가지 흥미로운 제조업체가 있습니다. 내가 함께 일했던 두 가지 예는 다음과 같습니다 스콘 그리고 /BJAM.

종속성을 자동으로 추적하는 크로스 플랫폼을 얻는 방법을 모릅니다. 당신이 할 수있는 최선의 방법은 소스 파일을 스캔하거나 C ++ 컴파일러가있는 스크립트를 사용하고 #includes (조건부 컴파일이 까다 롭다)를 찾아 makefile의 일부를 생성하는 것입니다. 그러나 무언가가 변경 될 때 마다이 스크립트를 호출해야합니다.

문제는 종속성을 자동으로 설정할 수있는 실현 가능한 방법이 있는지 여부입니다.

설정 한 것은 무엇을 의미합니까?

당신이 말했듯이, cmake는 의존성이 기계에 있으면 모든 것을 컴파일합니다. 의존성 소스를 포장하는 방법을 찾고 있습니까? 모든 소스가 있으면 CMake 및 빌드 도구 (GCC, NMAKE, MSV 등) 만 있으면됩니다.

편집 : side note, cmake는 파일이 필요한 경우 파일을 다운로드하는 데 사용할 수있는 파일 명령이 있습니다. file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log])

편집 2 : Cpack CMAKE Guys의 또 다른 도구는 파일을 포장하는 데 사용될 수 있으며 다양한 플랫폼에서 배포 할 수 있습니다. Windows 용 NSIS 및 *nix 용 .deb 또는 .tgz 파일을 만들 수 있습니다.

작업 장소에서 (전력 보호를위한 임베디드 시스템을 구축) CMAKE를 사용하여 문제를 해결했습니다. 우리의 설정을 통해 CMAKE는 다양한 위치에서 실행할 수 있습니다.

/
CMakeLists.txt "install precompiled dependencies and build project"
   project/
      CMakeLists.txt "build the project managing dependencies of subsystems"
      subsystem1/
         CMakeLists.txt "build subsystem 1 assume dependecies are already met"
      subsystem2/
         CMakeLists.txt "build subsystem 2 assume dependecies are already met"

요령은 각 cmakelists.txt 파일을 분리하여 호출 할 수 있지만 최상위 파일이 여전히 모든 것을 올바르게 빌드 할 수 있는지 확인하는 것입니다. 기술적으로 우리는 하위 cmakelists.txt 파일이 필요하지 않지만 개발자를 행복하게 만듭니다. 우리 모두가 프로젝트의 루트에서 하나의 모 놀리 식 빌드 파일을 편집해야한다면 절대 고통 일 것입니다.

나는 시스템을 설정하지 않았다 (나는 도움을 받았지만 내 아기는 아니다). 저자는 Boost Cmake 빌드 시스템에는 정말 좋은 것들이 있었기 때문에 모든 것을 매끄럽게 만드는 데 도움이된다고 말했다.

많은 *닉스 시스템에서는 어떤 종류의 패키지 관리자 또는 빌드 시스템이 사용됩니다. 소스 물건의 가장 일반적인 것은 GNU Autotools입니다. 내가 들었던 것은 극도의 슬픔의 원천입니다. 그러나 DEP 용 몇 개의 스크립트와 온라인 보관소를 사용하면 다음과 비슷한 것을 설정할 수 있습니다.

  • 프로젝트에서 MakeFile에서 종속성을 다루는 대상 (선택적으로 하위 타겟팅)을 만듭니다.
  • 각 종속성의 대상 내에서 DEP 소스가 프로젝트에 있는지 확인하십시오 ( *nix를 사용할 수 있습니다. touch 이를 위해서는 더 철저 할 수 있습니다)
  • DEP가 없으면 사용할 수 있습니다. curl, DEP를 다운로드하려면 등
  • 모든 경우에, DEP 대상이 재귀 적으로 전화를 걸도록한다.make; make install; make clean; 등) 등의 종속성의 makefile (또는 다른 스크립트/빌드 파일)에. DEP가 이미 제작되고 설치된 경우 Make는 상당히 신속하게 돌아갑니다.

그러나 각 DEP의 설치 자 (설치 관리자는 대화식입니까?)에 따라이를 중단시킬 수있는 많은 코너 케이스가있을 것입니다. 그러나이 접근법은 일반적인 아이디어를 다루어야합니다.

지금은 정확한 버전 요구 사항으로 C/C ++ 앱의 모든 종속성을 자동으로 설치할 수있는 도구를 연구하고 있습니다.

  • 컴파일러
  • 리브스
  • 도구 (cmake, autotools)

지금은 내 앱에서 작동합니다. (UnitTest ++ 설치, 부스트, WT, SQLITE, CMAKE ALL ALL ALL ALL ORDER)

«C ++ 버전 관리자»(우수 Ruby 버전 관리자에서 영감을 얻음)이라는이 도구는 Bash로 코딩되어 GitHub에서 호스팅됩니다. https://github.com/offirmo/cvm

모든 조언과 제안이 환영됩니다.

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