2012-07-07 3 views
0

Qt 프레임 워크와 연결되는 Xcode에서 C++ 프로젝트를 만듭니다. 안녕하세요 세계 프로그램이 잘 작동합니다. QObject에서 파생 된 클래스를 추가하고 Q_OBJCET 매크로를 추가하면 링크 오류가 발생합니다.Xcode에서 Q_OBJECT 매크로로 헤더 파일을 컴파일하는 방법은 무엇입니까?

클래스는 내가 먼저 MyObject.h를 컴파일 MOC를 사용하여 추가해야합니다 알고 MyObject.h

MyObject.cpp

#include "MyObject.h" 

MyOBject::MyOBject() 
{ 
} 

#ifndef MyObject_h 
#define MyObject_h 

#include <QtCore/QObject> 

class MyOBject : public QObject 
{ 
    Q_OBJECT 

public: 
    MyOBject(); 

}; 


#endif 

입니다 Xcode 프로젝트에 moc_MyObject.cpp를 생성했습니다.

Microsoft Visual Studio에서 moc 사용자 지정 도구로 컴파일되도록이 헤더 파일을 구성 할 수 있습니다. 그리고 generate cpp 파일을 VS 프로젝트에 추가하십시오.

그러나 이것은 Xcode입니다. 내 질문은 : Qcode에서 동일한 의미 Q_OBJECT 매크로를 포함하여 헤더 파일을 컴파일 할 수 있습니까?

+0

* * *해야 *해야합니다. C++ 전 처리기와 컴파일러보다 먼저'moc'을 실행해야합니다. 그리고 전체 게시물을 축소 할 수 있습니다 : "moc을 Xcode에 빌드 단계로 추가하려면 어떻게해야합니까?" 아마도이 문제가 발생한다면'uic'과'rcc'에 대해서도 똑같이해야 할 것입니다. – cmannett85

답변

1

Xcode에서 특정 헤더 파일에 대한 사용자 지정 도구를 설정하는 방법을 찾지 못했습니다. 빌드 단계 스크립트 (빌드 단계 -> 빌드 단계 추가 -> 실행 스크립트 추가)를 통해 해결책을 찾았습니다. moc 명령 줄을 스크립트로 추가하고 생성 된 moc_MyObject.cpp 파일을 MyObject.cpp에 포함 시켰습니다. 이제 작동합니다. 여기

4

은 엑스 코드 (6)에 그것을 할 방법은 다음과 같습니다

이 규칙은 새로운 사용자 정의 규칙을 만들 대상 및 빌드에를 선택합니다. "프로세스"드롭 다운을 "이름이 일치하는 소스 파일"로 설정하고 그 옆에 *.h을 입력하십시오. 설정 아래에 드롭 "사용" "사용자 정의 스크립트 :"이 가까이 스크립트 유형 뭔가하는 :

/path/to/your/Qt/bin/moc ${INPUT_FILE_PATH} -o ${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}_moc.cpp 

당신은 당신의 MOC 실행이 곳의 경로를 변경해야합니다. 사용자 정의 규칙은 여기까지

${DERIVED_FILE_DIR}/${INPUT_FILE_BASE}_moc.cpp 

: 지금에 "출력 파일"로 설정하십시오.

이제이 규칙으로 헤더를 컴파일하십시오. 목표가 아직 선택되어있는 동안 "빌드 단계"로 이동하십시오. "소스 컴파일"섹션을 펼치고 하단의 "+"버튼을 누릅니다. Q_OBJECT 클래스가있는 헤더 파일을 찾아서 추가하십시오. 그 헤더를 찾을 수 없다면 먼저 헤더를 프로젝트에 추가하십시오.

그렇습니다. Xcode는 그 헤더에서 moc를 실행하게되며, moc의 출력은 .cpp이며, 컴파일되어 앱에 링크되어 있어야합니다.

+0

좋은 답변입니다. 감사합니다. –

+0

감사합니다. 왜 moc 파일이 생성되지 않는지 이해하는데 많은 시간을 할애합니다. 결과적으로 "소스 컴파일"단계를 잊어 버렸습니다. – Unick