2013-08-07 1 views
1

최근 cmake를 사용하여 주로 qt 프로젝트를 관리하기 시작했습니다. 주로 Visual Studio 2012와 xcode 사이를 쉽게 전환 할 수 있습니다.조합 cmake 2.8.11.2와 qt 5.1은 ui_xxx.h 파일을 만들지 않습니다.

이제 이상한 문제가 생겼습니다. (이미 이상하게 여겨졌 기 때문에 이상합니다.)

문제는 cmake (정확한 cmake-gui)가 ui_xxx.h 파일을 만들지 않는다는 것입니다 (더 이상?). 나는 이미 솔루션을 인터넷을 검색하지만, 내가 그 문제에 유일한 사람이야 보인다;

단순 이유로

내 개인의 실수 나 어리 석음이 나는 또한 시도 제거하기 위해) 매우 기본 설정 여기에서 찾을 :

https://github.com/euler0/mini-cmake-qt/blob/master/CMakeLists.txt

하지만 여전히 - ui_xxx.h가 아닙니다.

두 개의 다른 (Windows 7 64 비트) 컴퓨터에서 동일한 결과를 테스트했습니다.

이미이 게시물의 주제에서 설명한 것처럼 cmake 버전 2.8.11.2 및 qt 5.1을 사용하고 있습니다. 환경 변수 QTDIR을 "c : \ Qt \ Qt5.1.0 \ 5.1.0 \ msvc2010 \"으로 설정하고 "% QTDIR % \ bin"을 PATH에 추가했습니다.

위의 링크에서 CMakeLists.txt 파일을 사용하면 "cmake_policy (SET CMP0020 OLD)"를 파일에 추가하여 "정책 CMP0020이 설정되지 않았습니다"라는 경고 만 표시됩니다.

무엇이 누락 되었습니까?

+0

나는 UI 파일이 빌드 경로의'ui' 서브 디렉토리에 생성 된 것 같습니다. 빌드 경로를보고 파일의 위치를 ​​찾으십시오. –

+0

안녕하세요 파벨, 답장을 보내 주셔서 감사합니다.하지만 ... 파일이 3 개 밖에 없을 때 파일이 생성되는 것을보기가 어렵지 않습니다. 그 파일은 거기에 없기 때문에 더 많은 질문이 있습니다 : 환경 변수를 설정하는 것을 잊었거나 cmake에 "<어떤 이유로 든 ui_xxx.h 파일을 만들 수 없습니다"라는 메시지가 출력됩니다. – Seamus

+0

VS를 사용할 때만 이런 현상이 발생합니까? Qt Visual Studio Add-In을 보았습니까? – nonexplosive

답변

1

정말이 문제가 발생하지 않는 사람이 있습니까?

나는 더 이상 문제를 디버깅하려고 했으므로 Qt5WidgetsMacros.cmake을 사용하여 모든 변수를 출력하도록 수정했습니다. 내 Qt5WidgetsMacros.cmake 지금은 다음과 같습니다

function(PRINT_LIST caption items) 
    set(i 1) 
    foreach (item ${items}) 
     message(${caption} " " ${i} ": " ${item}) 
     math(EXPR i "${i}+1") 
    endforeach() 
endfunction() 

# qt5_wrap_ui(outfiles inputfile ...) 

function(QT5_WRAP_UI outfiles) 
    set(options) 
    set(oneValueArgs) 
    set(multiValueArgs OPTIONS) 

    cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) 

    set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS}) 
    set(ui_options ${_WRAP_UI_OPTIONS}) 

    PRINT_LIST("Option" "${options}") 
    PRINT_LIST("oneValueArg" "${oneValueArgs}") 
    PRINT_LIST("multiValueArg" "${multiValueArgs}") 
    PRINT_LIST("ARGN" "${ARGN}") 
    PRINT_LIST("UI file" "${ui_files}") 
    PRINT_LIST("UI option" "${ui_options}") 

    foreach(it ${ui_files}) 
     get_filename_component(outfile ${it} NAME_WE) 
     message("outfile: " ${outfile}) 
     get_filename_component(infile ${it} ABSOLUTE) 
     message("infile: " ${infile}) 
     set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h) 
     message("outfile: " ${outfile}) 
     message("Qt5Widgets_UIC_EXECUTABLE: " ${Qt5Widgets_UIC_EXECUTABLE}) 
     add_custom_command(OUTPUT ${outfile} 
      COMMAND ${Qt5Widgets_UIC_EXECUTABLE} 
      ARGS ${ui_options} -o ${outfile} ${infile} 
      MAIN_DEPENDENCY ${infile} VERBATIM) 
     list(APPEND ${outfiles} ${outfile}) 
    endforeach() 

    PRINT_LIST("Outfile" "${outfiles}") 
    set(${outfiles} ${${outfiles}} PARENT_SCOPE) 
    PRINT_LIST("Outfile" "${outfiles}") 
endfunction() 

내 원래의 게시물에있는 링크에서 CMakeLists.txt 파일로 출력 - https://github.com/euler0/mini-cmake-qt/blob/master/CMakeLists.txt은 -입니다 :

multiValueArg 1: OPTIONS 
ARGN 1: ./ui/mainwindow.ui 
UI file 1: ./ui/mainwindow.ui 
outfile: mainwindow 
infile: C:/t/test/ui/mainwindow.ui 
outfile: C:/t/test/out/ui_mainwindow.h 
Qt5Widgets_UIC_EXECUTABLE: Qt5::uic 
Outfile 1: UI_HEADERS 
Outfile 1: UI_HEADERS 

좋은 I를 보이는 아직 말하지만 : no ui_mainwindow.h

완성도를 위해 여기 내 qt- 설정이 있습니다 :

QT_SYSROOT: 
QT_INSTALL_PREFIX:C:\Qt\Qt5.1.0\\5.1.0\msvc2012 
QT_INSTALL_ARCHDATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012 
QT_INSTALL_DATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\ 
QT_INSTALL_DOCS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\doc 
QT_INSTALL_HEADERS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\include 
QT_INSTALL_LIBS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\lib 
QT_INSTALL_LIBEXECS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\libexec 
QT_INSTALL_BINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\bin 
QT_INSTALL_TESTS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\tests 
QT_INSTALL_PLUGINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\plugins 
QT_INSTALL_IMPORTS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\imports 
QT_INSTALL_QML:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\qml 
QT_INSTALL_TRANSLATIONS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\translations 
QT_INSTALL_CONFIGURATION: 
QT_INSTALL_EXAMPLES:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\examples 
QT_INSTALL_DEMOS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\examples 
QT_HOST_PREFIX:C:\Qt\Qt5.1.0\\5.1.0\msvc2012 
QT_HOST_DATA:C:\Qt\Qt5.1.0\\5.1.0\msvc2012 
QT_HOST_BINS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\bin 
QT_HOST_LIBS:C:\Qt\Qt5.1.0\\5.1.0\msvc2012\lib 
QMAKE_SPEC:win32-msvc2012 
QMAKE_XSPEC:win32-msvc2012 
QMAKE_VERSION:3.0 
QT_VERSION:5.1.0 

아이디어가 있으십니까?

+4

죄송합니다, 내 나쁜 : ( 당혹 스럽지만 여전히 : 내 문제를 일으키는 이것이 어떻게 작동해야하는지에 대한 오해였습니다. cmake가 uic.exe를 호출한다고 생각했습니다.exe) 나를 위해 ui_xxx.h 파일을 바로 작성합니다. 현실에서는 makefile (또는 내 경우에는 VS2012 프로젝트)의 프로젝트에 사용자 정의 빌드 단계를 소개합니다. 그래서 ui_xxx 파일은 I ** 빌드 ** my ** 프로젝트 **에서만 생성됩니다. 음 ... 어쩌면 내 실수는 다른 사람에게 도움이 될 수 있습니다. – Seamus

+0

그래서 무슨 일이 일어 났습니까? 내 메이크 파일을 호출하여 프로젝트를 빌드 할 때마다 ui_xxx.h 헤더에 실종되었다고 표시됩니까? –

관련 문제