2011-02-14 4 views
0

C++ 헤더 및 메이크 파일 작업에 대한 두 가지 질문이 있습니다. 나는 모든 부분을 가지고 있다는 것을 알고 있으며, 나는 그것들을 조합하는 방법을 모르겠습니다.C++ include 및 Makefiles

나는 다음과 같은 파일이 있습니다

main.cpp 
Point.cpp 
Point.h 

Point.h 내 간단한 Point 객체를 선언, 정의는 Point.cpp 파일 안에 있습니다. 그런 다음 main() 안에 Point 객체를 만들고 사용하고 싶습니다.

Point.cpp 파일 안에 Point.h 파일을 포함해야합니까, 아니면 Makefile에서 처리해야하는 파일입니까? 또한 Point 객체를 사용하는 main.cpp 파일 : Point.cpp에 대해 include가 필요하거나 Makefile에서 수행 할 수있는 작업입니까?

여기서 각 파일에는 무엇이 포함되어야하며 내 Makefile은 어떻게 표시되어야합니까? 리눅스 플랫폼에서 작동

// 독점 //

+0

현재 어떤 플랫폼에서 작업하고 있습니까? Windows, Linux ...? – Tony

+0

@Tony Linux 독점적으로 – Prospero

답변

6

메이크 특정 파일이 최신 때 특정 명령을 실행하는 방법에 지나지 않는다. make 프로그램은 C++에 대해 아무 것도 모릅니다.

main.cpp와 Point.cpp 모두 #include "Point.h"이어야합니다. 파일을 편집 할 때 make이 프로그램을 올바르게 다시 작성하도록하려면 main.o와 Point.o를 Point.h의 종속성으로 명시 적으로 선언해야합니다.

여기에 매우 간단한 예제 :

all : point_app 

point_app : Point.o main.o 
    $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 

Point.o : Point.h 

main.o : Point.h 

의 gcc/g ++ 및 자동으로 이러한 헤더 파일 종속성을 생성 할 수 있도록 트릭을 가지고 있는지 확인,하지만 난 나를 위해 그들을 사용했습니다 이후는 너무 오래되었습니다 그들의 사용에 대한 적절한 조언을 제공하십시오. gcc의 -M... 옵션 군을 시작으로 문서를 조회 할 수 있습니다.

+0

왜 내가 단일 파일 main.cpp을 컴파일하려고 할 때 혼란 스럽습니다. Point.cpp를 포함시키지 않으면 오류가 발생합니다. 메이크 파일을 사용한다면 main.cpp는 Point.cpp를 더 이상 볼 수 없다. – Prospero

+0

소스 코드와 오류 메시지를 보지 않고 말하기는 어렵습니다. –

2

Makefile은 머리글에 아무 작업도 수행하지 않습니다. 포인트를 사용하려면 수동으로 메인에 포함시켜야합니다.

0

헤더 파일은 클래스 정의를 제공하므로 클래스의 개체를 사용하려는 경우 적절한 헤더 파일을 포함하여 정의를 제공해야합니다.

클래스 구현이 필요하지 않으면 원본 (cpp) 파일을 포함 할 필요가 없습니다. 클래스가 명시 적으로 인스턴스화되지 않으면 템플릿 클래스에 대해이 작업을 수행해야합니다.

Makefile은 라이브러리 나 프로그램을 빌드하는 규칙을 정의하며 헤더 파일을 포함하지 않습니다.