2014-06-05 8 views
0

Qt 5.3 qmake으로 Visual Studio 2013 프로젝트를 생성 중입니다. I message($$MOC_DIR)이 경로가 제대로qmake로 Visual Studio 프로젝트를 생성 할 때 내 MOC_DIR이 무시되는 이유

MOC_DIR = $$BUILD_DIR/<DEBUG OR RELEASE>/moc 

을 형성하는 경우 : 내 .pro 파일에서, 나는 다음 줄을 가지고있다. 그러나 VS에서 빌드하면 moc_<CLASS>.cpp 파일이 해당 위치에 생성되지 않고 대신 .pro과 같은 디렉토리에 생성됩니다. 나는 컴파일하는 동안 다음과 같은 경고를 얻을 :

두 개 이상의 파일을 내가 생성의 내용을 보면 때문에, 놀라운 일이 아니다 동일한 위치

에 출력을 생성합니다 moc_<CLASS>.cpp의 이름으로 .vcxproj, 나는 다음 (관련이없는 태그/텍스트 ...를 생략) 참조 :

<CustomBuild Include="..\include\Class.hpp"> 
    ... 
    <Outputs Condition="...Release...">moc_Class.cpp;%(Outputs)</Outputs> 
    ... 
    <Outputs Condition="...Debug...">moc_Class.cpp;%(Outputs)</Outputs> 
    ... 
</CustomBuild> 

왜 내 사용자 지정 MOC_DIR이 무시되고 있습니까?

답변

0

Qt5 qmake으로 생성 된 다른 VS2013 프로젝트는 예상대로 지정된 위치에 moc_<CLASS>.cpp 파일을 배치했기 때문에 .pro의 다른 부분이 간섭하고있는 것으로 의심되었습니다.

나는 Boost (1.55)를 사용 중이며 Boost를 프로젝트에 추가하는 동안이 SO 질문 : link에 설명 된 문제를 발견했습니다.

나는 나의 .pro의 상단에 다음 줄 추가 :

load(moc) 
QMAKE_MOC += -DBOOST_MPL_IF_HPP_INCLUDED 

을 ... 그리고 그건 내 매크로 인수 불일치 버그를 정리. 또한 여기에 설명 된 버그가 발생했습니다. 어떤 이유로 load(moc)으로 설정하면 MOC_DIR으로 설정하면 qmake은 사용자 지정 MOC_DIR을 무시합니다. load(moc)의 순서를 바꾸면 MOC_DIR 이후로 설정하면 모든 것이 예상대로 작동합니다.

.vcxproj이 이제 올바르게 표시됩니다. 내 moc_<CLASS>.cpp 파일이 올바른 <BUILD>/debug/moc 또는 <BUILD>/release/moc 디렉토리에 저장됩니다.

그러나 : 나는 여전히 MSB8027 빌드 경고를받습니다. Visual Studio에서 known bug 인 것으로 보입니다. 그래도 내가 상황을 혼란스럽게 만들었지 만, 내가 load(moc)을 추가했을 때 moc 위치 만 깨뜨 렸을 때 문제가 발생하기 전에 경고를 받았다. 지금은 경고를 사용 중지합니다. Felix Huang의 대답 here을 참조하십시오.