2012-03-09 4 views
2

Qt, CMake 및 VS2010 컴파일러를 사용하고 있습니다. 작은 테스트 코드를 연결할 때 문제가있는 것 같습니다.Qt 프로그램이 연결되지 않았습니다. moc 파일이 생성되지 않았습니다.

plotter.cpp.obj : error LNK2001: unresolved external symbol "public: virtual str 
uct QMetaObject const * __thiscall Plotter::metaObject(void)const " (?metaObject 
@[email protected]@[email protected]@XZ)... 

(잠시 동안 계속)

가 오류가 나는 다음과 같은 코드에서 QObject를 상속려고 할 때 발생합니다 :

class Plotter : public QObject 
{ 
     Q_OBJECT 
public: 

링커는 다음과 같은 오류를 제공합니다 Q_OBJECT를 생략하면 프로그램이 링크되지만 런타임에 클래스 슬롯을 사용할 수 없습니다. plotter.h에 moc 파일이 생성되지 않은 것으로 나타났습니다. 이것은 내 CMakeLists.txt입니다 :

cmake_minimum_required (VERSION 2.6) 
    project (ms) 

    SET(CMAKE_BUILD_TYPE "Release") 

    FIND_PACKAGE(Qt4) 
    INCLUDE(${QT_USE_FILE}) 
    ADD_DEFINITIONS(${QT_DEFINITIONS}) 

    LINK_LIBRARIES(
     ${QT_LIBRARIES} 
    ) 

    set(all_SOURCES plotter.cpp main.cpp dialog.cpp) 
    QT4_AUTOMOC(${all_SOURCES}) 
    add_executable(ms ${all_SOURCES}) 
    target_link_libraries(ms ${LINK_LIBRARIES}) 

MOC 파일이 dialog.cpp 생성,하지만 plotter.cpp을 위해, 어떻게 가능합니까?

감사합니다.

+1

plotter.h 파일에서 수동으로 moc를 실행 해 보았습니다 - 구문 분석되지 않는 항목이 있는지 또는 cmake의 오류 인 경우 –

+1

Qt는 훌륭한 IDE를 가지고 있습니다. + qmake를 사용 해본 적이 있습니까? –

+0

파일은 어떻게 구성되어 있습니까? 헤더 파일에 모든 코드를 작성하고 있습니까? 그렇다면 moc_ 파일을 맨 아래에 포함시켜야합니다. –

답변

1

우선 QT4_AUTOMOC을 올바르게 사용하고 있는지 확인하십시오. documentation이 지적했듯이, 소스에 모아진 파일을 올바르게 포함시켜야합니다.

또한 QT4_AUTOMOC은 여전히 ​​CMake에 의해 시험용으로 표시되어 있으므로 실제로 예상 한대로 작동하고 필수 파일을 올바르게 생성하는지 확인하십시오. 그렇지 않은 경우, QT4_WRAP_CPP를 사용하여보다 강력한 고전 솔루션 로의 전환을 고려해야 :

# notice that you need to pass the *header* here, not the source file 
QT4_WRAP_CPP(MY_MOCED_FILES plotter.hpp) 

# optional: hide the moced files in their own source group 
# this is only useful if using an ide that supports it 
SOURCE_GROUP(moc FILES ${MY_MOCED_FILES}) 

# then include the moced files into the build 
add_executable(ms ${all_SOURCES} ${MY_MOCED_FILES}) 

그 외에도에서, 당신의 CMake 파일이 잘 보인다.

+0

힌트를 보내 주셔서 감사합니다. QT4_WRAP_CPP는 두 헤더 파일을 모두 처리하지만 dialog_moc.cxx 파일을 생성합니다. 어쨌든 Qt Creator로 시작 했으므로 이제는 정상적으로 작동합니다. – user1254962

+0

SOURCE_GROUP도 지적 해 주셔서 감사합니다. –