2013-10-27 6 views
0

많은 구성 요소가있는 큰 C++ 프로젝트를 관리해야한다고 생각합니다. (가장 좋은 용어라고 생각합니다.) 모든 의도와 목적을 위해 저는 처음 프로그래머입니다. 컴파일, 헤더 파일 등의 기본 사항을 이해하지만 숙제보다 큰 작업은 한 번도하지 않았습니다. 따라서 메모리 관리자, 렌더러, 물리 시뮬레이션 등과 같은 다양한 구성 요소가있는 게임 엔진과 같은 것을 사용해 봅시다. 어떻게 이들 구성 요소를 개별적으로 작업 할 수 있습니까? 그렇지만 전체로 쉽게 통합 할 수있는 방법은 무엇입니까? 예를 들어, 자신의 메인과 함께 각 작품에 대해 별도의 비주얼 스튜디오 프로젝트를 만들겠습니까? 모든 것을위한 하나의 커다란 프로젝트가있는 경우, 완성되지 않은 다른 구성 요소없이 한 구성 요소에서 어떻게 작업하여 모든 컴파일이 실패합니까? 나는 몇 가지 주요 개념을 놓치고있는 것처럼 느껴진다. 마찬가지로, 작업 할 부분을 체크 아웃해야하는 여러 프로그래머가있는 프로젝트의 경우, 컴파일 할 수 있도록 모든 코드를 가져 오거나 자신의 임시 프로젝트를 설정하여 자신의 작업을 수행합니까? 두 옵션 모두 잘못 들린다. 컴파일 할 수있는 주요 기능이 있어야합니까?대형 C++ 프로젝트의 구성 요소를 어떻게 결합합니까?

나는이 주제에 대해 교육하는 누군가에게 감사 할 것입니다. 나는 이것이 뭔가 있어야한다고 생각하며, 어떻게 든 완전히 놓친 것입니다.

+0

헤더 파일에 대해 이미 알고 있다고하지 않았습니까? :) – Sarien

+0

나는했다. 그러나 분명히 나는이 문맥에서 적어도 ...하지 않는다. 기분이 나에게 가르쳐주세요. – Morgan

답변

1

큰 프로그램을 사용하여 작업 할 때 하나의 소스 파일에 주 프로그램이 있고 나머지 (많은 소스 파일이있을 수 있음)가 main에서 호출되는 것이 일반적입니다. 그런 다음 구축 전략이 필요합니다. 각각의 소스 파일을 컴파일하고 모두 함께 링크하는 스크립트 파일을 작성할 수 있습니다. 불행하게도 이것은 빌드 시간이 길어질 수 있으므로 전문 프로그래머는 변경되는 파일 만 다시 작성하는 make 파일을 사용합니다. 더 자세히 살펴보면 소스 그룹을 라이브러리로 구성하고 라이브러리를 별도로 빌드 한 다음 나머지 컴파일 된 소스 파일과 링크 할 수 있습니다.

큰 프로젝트를 빌드하는 방법을 보려면 gmake (Linux 용)를 찾아보십시오. 난 당신이 컴파일 된 파일을 .obj 확장명 및 라이브러리 .lib 확장명이 Microsoft VC++ 사용하고있는 것 같아요. Microsoft는 gmake를 사용하는 것보다 훨씬 더 복잡한 라이브러리를 구축하는 방법을 가지고 있습니다.

더 자세히 살펴보면 공유 라이브러리 (Windows의 동적 연결 라이브러리 -DLL)가 나타납니다.

+0

정보를 제공해 주셔서 감사 드리며, 도서관을 조사하고 파일을 작성하겠습니다. – Morgan

+0

Microsoft는 더 큰 프로젝트를 구축 할 수있는 자체 방법을 가지고 있습니다. 이것은 Visual Studio에 통합되어 있습니다. Linux와 MacOS에서는 gmake를 사용하여 더 큰 프로그램을 만듭니다. gmake를 실험하고 싶다면 Windows (또는 코드 블록)에 MinGW를 설치할 수 있습니다. 나는 내 웹 사이트 인 seddon-software.co.uk에서 많은 gmake 예제를 가지고있다. 추신 당신이 대답을 좋아하는 경우 투표하십시오. – resigned

0

이것은 스택 오버플로 형식에 대한 큰 질문이 아닙니다. C++은 네임 스페이스, 클래스 및 헤더 파일과 같은 대규모 코드 기반을 관리하기위한 언어 기능을 지원합니다. 그러나 당신의 질문은 그들이 무엇을위한 것인지에 대한 관점의 부족을 제시하거나, 소프트웨어 프로젝트에 코드를 기여하기위한 기술적 인 틀과 프로세스에 대한 제한된 이해를 제안하는 것 같습니다. 어떤 C + + 특정 문제가되지 않습니다.

살아있는 프로젝트를 진행할 때 가장 큰 관심사는 복잡성입니다. 즉, 어느 한 시점에서 생각해야 할 사항의 수를 줄이는 것입니다. 즉, 다른 프로그래머가 사용자 인터페이스에서 작업하고 있다면 물리적 엔진의 코드가 변경 사항을 반영하도록 변경하지 않아도된다는 것입니다. 따라서 추상화 및 정보 숨기기를위한 인터페이스가 필수적입니다.

부여 나는 꽤 녹색이기 때문에 실제적인 충고는 할 수 없다. 나는 당신의 질문이 얼마나 애매한 지에 대한 약간의 관점을주기 위해이 점을 언급한다. 귀하의 질문을 정확하게 이해하면 McConnell의 Code Complete 2와 같은 책을보실 수 있습니다.

+0

감사합니다. 나는이 책을 점검 할 것입니다. – Morgan

0

큰 프로젝트는 조각으로 나뉩니다. 일반적으로 각 조각을 개별적으로 컴파일 할 수 있어야합니다. 내가 아는 가장 좋은 방법은 여러 구성 요소간에 인터페이스를 선언하고 종속성을 가능한 한 최대한 줄이면서 '테스트'프로그램을 빌드하는 것입니다.이 프로그램은 작고 두 가지 이유가 있습니다. 작은 코드를 테스트하고 main(). 디렉토리 구조는 일반적으로 :

yourlib/ 
    lib/ 
    ext-inc/ 
    test/ 
    other dirs/ 
    ... 

lib 디렉토리가 출력 라이브러리 개체를 포함 (이 .a .so는) 내선-lib 디렉토리에 포함 된 외부 코드가 사용하는 헤더 (때로는 소위 '대중'또는 그냥 'INC ') 테스트 디렉토리에는 보통 main.c (cpp) 파일이 있으며 필요에 따라 더 많은 파일이있을 수 있습니다.

체크 아웃 (svn)/복제 (git)/동기화 (p4)/등을하면 모든 것을 취할 수 있지만 해당 지역에서만 작동합니다. 일단 완료되면 변경 사항을 메인 브랜치에 병합/제출합니다.

+0

Morgan은 라이브러리에 대해 몰라서 GIT, SVN, Perforce 등을 소개하지 않는 것이 좋습니다. 그들은 나중에 올 수 있습니다. – resigned

+0

이것은 OP와 조금 오래된 버전 일 수 있지만, ** John Lakos의 ** Large Scale C++ Software Design **에는 많은 조언이 있습니다. – user888379