2012-08-02 4 views
2

MACRO가 정의되면 우리 프로젝트에서 소스와 헤더 파일을 추가했습니다. .pro 파일에서 이렇게 처리합니다.Qt Creator와 조건부 빌드

contains(DEFINES, MY_DEF) { 
message("Support MY_DEF") 
INCLUDEPATH += \ 
    my_include_dir 
SOURCES += \ 
    source1.cpp \ 
    source2.cpp 
HEADERS += \ 
    my_include_dir/header1.h \ 
    my_include_dir/header2.h 
FORMS += \ 
    myform.ui 
} 

빌드하는 동안 문제가 없습니다. MY_DEF가 정의되지 않은 경우 파일은 컴파일되지 않습니다. MY_DEF는 다음과 같이 정의한다 : MY_DEF 정의 여부 반면

DEFINES += MY_DEF 

호기심, Qt는 창조주는 항상 프로젝트 트리에서 파일을 표시합니다. 정의되지 않은 경우 빌드에 사용되지 않지만 여전히 표시되고 편집 가능하며 검색을 통해 검색 할 수 있습니다. Qt Creator의 버그입니까?

파일이 프로젝트의 일부인지 여부를 명확히 알 수 없기 때문에 이것은 큰 문제는 아니지만 약간 성가신 일입니다.

답변

0

이것은 QtCreator에서 문제가되는 것으로 보이며 .pro 파일을 읽는 방법입니다. 실제로 파일을 완전히 구문 분석하지 않고 대신 특정 비트를 선택하도록 선택했습니다. QtCreator에서는 항상 하나의 플랫폼 또는 다른 플랫폼에만 포함되는 파일에서 동일한 문제가 발생합니다.

필자는 이유는 파일 목록을 얻기 위해 qmake의 절반을 다시 구현하지 않거나 '올바르게 구문 분석하려 할 때 잘못된 대답을 얻을 수있는 상황' 그들은 무작위로 잘못 생각하는 대신 잘못 예측할 수있는 것으로 선택했습니다.

+0

그건 내가 생각한 것입니다. 공식 Qt 포럼에이 문제를 게시해야합니까? 감사. –

2

고의적입니다. 프로젝트 트리에 표시하기 위해 .pro 파일에 언급 된 모든 파일 ("번역 가능한 문자열"을 수집하는 데 사용되는 것과 본질적으로 동일한 파일)을 수집하는 특별한 "누적"파싱 모드가 있습니다. 그렇지 않으면 "프로젝트의 모든 파일에서 바꾸기"와 같이 실행되는 플랫폼이나 컨텍스트에 따라 결과가 달라집니다. [포함되는 qmake의 절반은 아니지만 모두에 가깝습니다 ...]

+0

의도적 인 링크로 참조 할 수있는 링크가 있습니까? 조건이있는 SUBDIRS 템플릿이 항상 선택된 패키지 대신 모든 패키지를 항상 게시하는 경우가 있습니다. 나는 그 패키지를 어떻게 해결할 것인지 궁금 해서요. 그리고 그것에 대해 조금 더 읽고 싶습니다. – quetzalcoatl

0

QMake에 포함 된 조건부 추가 외에도 조건부 소스 코드 주위에 #ifdef를 추가합니다. 그런 식으로 조건이 충족되지 않으면 시각적으로 컴파일이 중단되는 것을 볼 수 있습니다. 파일을 프로젝트 트리에서 완전히 삭제하는 것만 큼 좋지는 않지만 적용 할 수없는 경우 편집 할 때 빌드의 일부인 것처럼 보이게하는 것이 좋습니다.

관련 문제