2009-10-14 7 views
4

타사 라이브러리를 소스 컨트롤에 저장하는 방법을 묻는 게시물 (예 : thisthis)이 있다는 것을 알고 있습니다. 그 대답은 좋은 답변이지만, 아직 답변을 찾을 수 없습니다 :컴파일러/IDE를 변경해야하는 소스 컨트롤에 타사 프레임 워크/미들웨어 저장

라이브러리가 제대로 작동하도록 컴파일러/IDE를 변경해야하는 타사 미들웨어/프레임 워크 바이너리를 어떻게 저장합니까? 참고 : 내 필요에 따라 미들웨어 소스를 저장할 필요가 없습니다. 헤더 파일/lib/JAR 만 저장하므로 링크 할 준비가되었습니다.

일반적으로 라이브러리를 앱에 연결하기 만하면됩니다. 그러나 더 많은 것을 필요로하는 미들웨어/프레임 워크는 어떻습니까?

구체 예 :

  • Qt는 MOC 전처리.

  • ZeroC Ice Slice (ice) 컴파일러 (CORBA IDL 전처리 기와 유사).

기본적으로 이러한 프레임 워크/미들웨어는 응용 프로그램이 링크하기 전에 자체 코드를 생성해야합니다.

개발자의 관점에서 볼 때, 그는 단지 체크 아웃하기를 원하며 모든 것이 준비되어야합니다. 하지만 IDE/컴파일러가 제대로 설정되지 않아서 컴파일이 실패합니다 ..

어떻게 생각하세요?

답변

4

등 IDE의 설치, 운영 체제, 이것은 내가

1) 소스 제어에있는 모든 제 3 자 라이브러리를 저장하는 일이다 포함한 백업 다. 나는 모든 도서관을위한 지회를 가지고있다.

2) 빌드하는 데 사용 된 전체 도구 체인을 백업하십시오. 여기에는 모든 도구가 포함됩니다. 각 도구는 각 개발자 컴퓨터의 동일한 디렉토리에 설치되므로 개발자 컴퓨터를 원격으로 간단하게 설치할 수 있습니다.

3) 이것은 가장 하드 코어이지만 깨끗한 1 개의 완벽한 개발자 IDE 설정을 준비한 다음 VMWare/VirtualPC 이미지를 만들어냅니다. 이것은 나중에 설치 프로그램을 작동시킬 수 없을 때 유용합니다.

나는이 교훈을 고통스런 방법으로 배웠다. 왜냐하면 나는 제대로 구축되지 않은 Visual Studio 6 코드를 자주 걸어 가야하기 때문이다.

+0

나는 virtualpc/vmware 아이디어를 좋아합니다. 나는 빌드 상태를 보존하기 위해 그런 일을하려고 생각 해왔다. 아이디어를 가져 주셔서 감사합니다. – sivabudh

+0

+1은 VMWare 이미지 개념입니다. –

1

1 단계 추가는 어떨까요?

박쥐 파일로 시작되는 스크립트. 개발자는 하나의 .bat 파일 만 실행하고 bat 파일은 nant를 시작할 수 있으며 Nant 스크립트는 필요한 작업을 수행 할 수 있습니다.

+0

Qant 플러그인과 같은 비주얼 스튜디오 부가 기능을 설치하는 데 도움이되는 Nant 스크립트가 있으며, 자동으로 다음 버튼을 클릭 할 수 있습니까? – sivabudh

1

이것은 실제로 매우 미묘한 질문입니다. 빌드를 진행하는 데 필요한 환경의 기능을 관리하는 방법에 대해 설명합니다. 이 경우 코드 도구 체인의 최상위 레벨이지만 문제는 전체 툴체인 및 운영 체제의 주요 측면까지 포함하도록 일반화 할 수 있습니다.

내 작업장에는 코드가 성공적으로 실행되기 전에 기본 운영 체제에 대한 다양한 요구 사항이 있습니다. 여기에는 시스템 특정 구성 및 시스템 라이브러리 및 언어 런타임의 올바른 버전이 포함됩니다. 우리는 우리가 필요로하는 툴체인 요구 사항을 포함하는 일반적인 제네릭 빌드 머신 이미지를 유지함으로써이 문제를 해결했습니다. 우리는이를 처녀 컴퓨터로 밀어 넣을 수 있으며 완전한 툴 체인 및 보조 프로그램이 포함 된 기본 환경을 얻을 수 있습니다.

그런 다음 fsvs을 사용하여 추가 구성을 버전 제어하고 필요에 따라 특정 시스템 그룹에 계층화 할 수 있습니다.

마지막으로 우리는 CI 서버 (우리는 Hudson을 사용)에 연결된 사용자 정의 스크립트를 사용하여 특정 프로젝트에 필요한 모든 사전 처리 단계를 수행합니다. 이 방법은의 우리

주요 장점 :

  1. 우리가 구축하고 아주 쉽게 개발 및 생산 기계를 배포 (하고 IT 문제의이 측면을 처리해야) 할 수 있습니다.
  2. 우리는 쉽게 실패한 기계를 교체 할 수 있습니다.
  3. 우리는 테스트를위한 알려진 환경을 가지고 있습니다. 우리는 실제 환경에 들어가기 전에 시뮬레이션 된 '프로덕션 서버'에 모든 것을 설치합니다.
  4. 우리 (소프트웨어 팀) 버전은 중요한 구성 세부 정보와 명시적인 사전 처리 단계를 제어합니다.
+0

안녕하세요 ... 감사합니다. 도움이됩니다. – sivabudh

+0

"어떻게 처녀의 컴퓨터에 밀어 넣으시겠습니까?" 그것이 단순히 발행 된 컴퓨터에 이미지를 배포하는 것입니까? – sivabudh

+1

예. 우리는 CD 또는 USB 스틱에서 벗어나 자동으로 네트워크에서 새 컴퓨터로 이미지를 가져와 설치할 수있는 최소한의 커널을 제공하기 위해 노력하고 있습니다. 그러나 아직이 모델로 옮겨 가지 않았습니다. –

2

다른 해결책을 말하지 않는 한 더 나은 솔루션은 빌드 자체가 포함되어 있으며 필요한 모든 소프트웨어를 다운로드한다는 것입니다. 이것은 메이븐이 일하는 방식이며, 정말 편리합니다. 단점은 때로는 응용 프로그램 서버 또는 유사하게 다운로드 할 필요가 있지만 매우 실용적이지는 않지만 최소한 빌드가 성공하고 필요한 경우 빌드를 개선하는 것이 새로운 개발자의 책임이된다는 것입니다.

소프트웨어 설치가 필요하다면 당연히 잘 작동하지 않지만 어떤 경우에도 그러한 의존성을 피하려고 노력할 것입니다. 다른 경로를 추가 할 수 있습니다 (예 : Eclipse가 아직 코드를 작성하지 않은 경우 개미 스크립트가 코드를 컴파일합니다). 이것이 가능하지 않은 경우 대체 옵션은 무엇이 잘못되었는지에 대한 명확한 표시로 실패하는 것입니다 (예 : 'CORBA_COMPILER_HOME'이 설정되지 않았 으면 다시 설정하십시오).

모든 것이 가장 완벽한 해결책은 물론 응용 프로그램 (예 : OS, IDE, 저작물)으로 모든 것을 제공한다는 것입니다. 그러나 일반적인 경우에는 해당되는 것을 의심합니다. 그런 유형에 대해 어떻게 생각하십니까? 소프트웨어 제품을 빌드하기위한 요구 사항은 무엇입니까? 또한 소프트웨어를 새로운 플랫폼에 적용하려는 사람들을 제한합니다.

+0

답변 해 주셔서 감사합니다. 그것은 확실히 나에게 생각할 몇 가지 유용한 통찰력을 주었다. – sivabudh

1

업데이트 : 이것은 실제로 IDE 수정 방법에 대한 답변이 아닙니다. 그것은 C++/Python/Java를위한 일종의 Maven 대체물 일뿐입니다. IDE를 수정하여 물건을 만들 필요는 없습니다. 그렇다면 다른 IDE 또는 IDE 파일을 생성/수정하는 시스템이 필요합니다. (크로스 플랫폼 C/C++ 프로젝트 파일 생성에 대한 CMake를 참조하십시오.)


내가 작성한 시스템 (첫번째 개미 /으로 Beanshell에서 두 개의 서로 다른 장소에서, 다음 내 현재의 직장에서 파이썬을 재 작성) 세 번째 부분은 (누군가에 의해) 별도로 컴파일되고 HTTP를 통해 저장 및 공유됩니다.시작시

, 빌드 시스템의 repo에있는 모든 모듈을 통해 보이는 타사 lib 디렉토리 또는 앱 현재의 특정 버전을 다운로드 각 모듈의 설정 목표를 실행합니다

다소 서둘러 설명을 다음과 코드 개정 사용. 그런 다음 압축을 풀고 PATH/INCLUDE 등을 추가합니다 (또는 작은 libs의 경우 현재 repo의 단일 디렉토리에 복사). 그런 다음/useenv와 함께 Visual Studio를 시작합니다.

각 모듈의 파일은 필요한 항목을 확인하고 Visual Studio, Matlab 또는 Maya와 같은 설치 및 라이센스가 필요한 경우 로컬 컴퓨터에 있어야합니다. 그곳에 없으면 cmd 파일은 좋은 오류 메시지와 함께 실패합니다. 이렇게하면 올바른 버전이 있는지도 확인할 수 있습니다.

따라서 로컬 디스크에는 여러 디렉토리가 있습니다. % work %는 글로벌 환경 변수를 사용하여 설정해야하며, 적어도 무거운 C++을 수행하는 경우에는 시스템 또는 소스 체크 아웃과 다른 디스크보다 더 좋을 수 있습니다.

  • % 작업 % < - 모든 임시 파일을 로컬 저장소, 압축 해제, 및 각 작업 복사본의 임시 파일
  • 퍼센트 작업 %/_ 캐시 < - 다운로드 지퍼 (2 GB)
  • 퍼센트 작업 %/_local < - 지역 (개발 또는 travvelling 동안 다른 방식으로 검색) 지퍼
  • % 작업 %/_ 압축 해제 <이 - _cache에있는 파일의 압축을 풀고 (10기가바이트)
  • % 작업 % & _content < - 텍스처/3D 모델과 기타 큰 파일 R (수동 원 공급기를,이 5 기가 바이트 오늘, 중 VC에 적합하지 않습니다)
  • % 작업 %/D_trunk/< - 복사 작업을위한 저장소가 D 체크 아웃 :/트렁크
  • 퍼센트 작업 %/E_branches를/V2 < - 복사 작업을위한 저장소가 전자 체크 아웃 : 트렁크 1.37와 가지 부스트 사용하는 경우/분기/v2에서

그래서,/v2에서 1.39 사용, 모두 부스트 1.39 및 향상 - 1.37 상주을에/_cache/(zip으로) 및/_unzip/(원시 파일로).

d :/trunk/BuildSystem/Visual Studio.cmd의 bat 파일을 사용하여 Visual Studio를 시작하면 INCLUDE는 /_unzip/boost-1.37을 가리키고 runnig e :/branches/v2/BuildSystem/Visual Studio.cmd는 가리 킵니다. , INCLUDE는 /_unzip/boost-1.39를 가리 킵니다.

저장소에는 작은 일련의 부트 스트랩 바이너리 만 저장하면됩니다 (예 : wget 및 7z).

현재 약 10GB (압축 파일 크기가 큽니다!)로 압축 된 약 2GB의 압축 데이터를 다운로드하므로 소스 제어에서이를 지키는 것이 필수적입니다. 이 시스템을 사용하면 SVN 대신 Mercurial (또는 Git)과 같은 DVCS를 사용할 수있을 정도로 repo 크기를 작게 유지할 수 있습니다. (나는 Mercurials bigfiles 확장 또는 개별 http-served 디렉토리 대신 파일 공유를 사용하려고 생각하고있다.)

그것은 완벽하게 작동한다. 개발자는 체크 아웃하고 로컬 캐시에 환경 변수를 설정 한 다음 repo의 특정 배치 파일을 통해 Visual Studio를 실행하면됩니다. 압축을 풀거나 컴파일하거나 물건을 넣지 마십시오. 새로운 개발자가 컴퓨터를 즉시 설치할 수 있습니다. Visual Studio를 설치하면 더 많은 시간이 걸립니다.

새 컴퓨터를 처음 처음 사용하는 데는 시간이 걸리지 만 빠르며 몇 초 밖에 걸리지 않습니다.다운로드/압축 해제는 로컬 컴퓨터에서 공유됩니다. 추가 분기/버전을 체크 아웃해도 더 많은 공간을 차지하지 않습니다. 오프라인 작업도 가능합니다. 새로운 파일이 업로드되면 zip 파일을 수동으로 가져와야합니다. (이 메커니즘은 타사 라이브러리의 새 버전/컴파일을 테스트하는 데 필수적입니다.)

기본 사항은 repo on bitbucket이지만 기본 사항을 갖추기 전에 더 많은 작업이 필요합니다. 그렇다 문서 및 폴란드어에서, 나는 계획 :

  • 이 더 크로스 플랫폼 만들기 위해 대신 원시 vcproj - 파일의 cmake를 사용하도록 확장 할 수 있습니다.
  • 스크립트 (로컬의 repo에서 다운로드를 저장 포함) 타사 건물 패키지와 의 체크 아웃/다운로드에서 전체 과정을 압축하는이 ... 현재 그 내 dev에 컴퓨터에 있습니다. 안좋다. 고칠 것입니다. :) MOC에 관해서는

, 우리는 된 .vcproj 파일이 저장 Qt's Visual Studio add-in를 사용합니다. 잘 작동합니다. 나는 CMake이 이것에 대한 최선의 해결책 중 하나라고 생각한다.

+0

당신은 ".vcproj 파일에 이것을 저장하는 Qt의 Visual Studio Add-in"이 무엇을 의미하는지 자세히 설명 할 수 있습니까? – sivabudh

+0

을 구현 한 시스템에서 저장소의 다른 소프트웨어가 동일한 라이브러리의 다른 버전을 사용해야하는 경우를 어떻게 처리해야합니까? 즉, 소프트웨어 A는 프리 컴파일러 버전 3.0을 필요로하지만, 소프트웨어 B는 프리 컴파일러 버전 3.5가 필요할 수 있습니다. 개발자는 자신의 컴퓨터에서 A와 B를 모두 확인하려고했습니다. – sivabudh

+0

Qt VS 추가 기능 : http://qt.nokia.com/downloads/visual-studio-add-in. Qt 작업을 관리하는 Visual Studio 관련 플러그인입니다. 특히 Q_OBJECT가 포함 된 파일을 추가 할 때 헤더 파일에 moc을 실행하는 빌드 규칙을 자동으로 생성하고 프로젝트에 생성 된 moc_xxx.cpp 파일을 포함시킵니다. – Macke

1

나는 전문 빌드 서버에 midleware를 작성하는 업무를 아웃소싱하고 소스 제어하에 정규 써드 파티 의존성으로서 만 바이너리 출력을 포함한다.

이 전략을 성공적으로 적용하려면 모든 개발자가 midleware 코드를 변경하고 자주 다시 컴파일해야하는지 여부에 따라 달라집니다. 그러나이 문제는 개인 빌드를 생성 할 수있는 Teamcity와 같은 지속적인 통합 서버를 통해 해결할 수도 있습니다.

빌드 프로세스는 같을 것이다 다음

  • 미들웨어의 repo가 ​​포함 된 미들웨어 코드
  • 빌드 서버 구축 미들웨어는
  • 제 3 자로서 저장소를 투사
  • 밀어 미들웨어 빌드 출력은
를 참조
관련 문제