2017-11-20 3 views
0

앱 소스 디렉토리 외부에있는 헤더 파일에 문제가 있습니다. 내 프로젝트 디렉토리 구조 :소스 디렉토리 외부에있는 Qt 헤더 파일을 moc 목록에 추가하는 방법은 무엇입니까?

/prj 
    /include 
     slon.h 
     ... 
    /src 
     /app 
      slon.cpp 
      ... 
     /lib1 
     /lib2 
     ... 
    SConstruct 

소스 파일은 'prj/src/app'에 있고 공통 헤더는 'prj/include'에 있습니다. 일부 헤더는 Q_OBJECT 매크로를 포함하고 있기 때문에 moc되어야합니다. qmake에서 이러한 헤더는 명시 적으로 소스로 추가되었습니다. SCons에서, 내가 이해할 때, 그러한 헤더는 명시 적으로 추가되면 안된다. SCons는 소스를 스캔하고 적절한 헤더를 자동으로 유도한다. 그러나 이것은 소스 파일과 동일한 디렉토리에있는 헤더에 대해서만 작동합니다. 헤더 파일이 'prj/include'디렉토리에 있으면 SCons는 헤더를 moc하지 않습니다. 위의 예제에서 'slon.h'파일은 Q_OBJECT 매크로를 가진 클래스를 포함하고 있으며 'slon.cpp'에 포함되어 있지만 moc되지 않고 단지 무시됩니다.

SCons를 별도의 디렉토리에있는 moc 헤더로 강제 변환하려면 어떻게해야합니까?

답변

0

내 지식에 따라 핵심 소스 인 SCons의 기본 Qt 도구 (Qt3 프로젝트 용으로 설계된)는 이에 대한 해결책을 제공하지 않습니다. 당신은

별매의 개발 QT4 및 Qt5 도구 (the SCons ToolIndex를 참조하고 해당 링크를 따라)를

ExplicitMoc4(target, source) 

ExplicitMoc5(target, source) 

를 제공합니다 ... 물론, 자신의 빌더를 작성할 수 작성자. 이것들은 "Automoc"기능이 실패한 모든 경우에 도움이 될 것입니다.

+0

예, 제 scons + qt 작업의 맨 처음부터 예쁜 도구 SCons_Qt5를 사용하고 있습니다. 대단히 감사합니다! 나는 ExplicitMoc5를 사용하려고 시도했고 다음을 발견했다. 간단한 'ExplicitMoc5 (MocTarget, MocHeader)'는 빌드 디렉토리에 올바른 * .cc 및 * .o 파일을 만들지 만 링크되지 않은 파일이다. 'Program (Target, Sources + MocTarget)'을 추가하면 'moc_ .cc'및 'moc_name.o'파일이 'include'디렉토리에 생성되고 * .o 파일이 링커에 전달되어 재 선언 오류가 발생합니다. 'ExplicitMoc5'를 사용하는 올바른 방법은 무엇입니까? –

+0

구체적인 예를 제시하지 않고서는 말하기가 어렵습니다. 동시에 "variant dir"기능을 사용하려고하는 것 같습니다. 이 가정이 맞다면 모든 SConscript 호출에서 "duplicate = 1"이 문제를 해결하는지 확인하십시오. 그렇지 않은 경우 MWE를 작성하여 질문에 추가하십시오. 바람직하게는 완전히 새로운 질문을 작성하거나 [SCons 사용자 메일 링리스트] (http://scons.org/lists.html)에 작성하십시오. – dirkbaechle

+0

예, "variant_dir"을 사용하고 있습니다 ... 내가 ExplicitMoc5로 성공할 수있을 것 같습니다. 문제는 대상 및 소스 노드에 대한 잘못된 경로 정의로 인한 것입니다. 다른 컨텍스트에서 다른 값을 반환하는 env.Dir()을 사용하여 경로 문자열을 구성하려고했습니다. 대상 및 소스 노드에 대한 올바른 경로 값은 문제를 해결합니다. ExplicitMoc5는 정상적으로 작동합니다. 다시 한 번 감사드립니다! –

관련 문제