2017-10-21 13 views
-1

현재 QMake에서 CMake로 프로젝트를 옮기고 있습니다. Qt UIC가 처리하고자하는 실제 파일 대신 존재하지 않는 ui 파일을 처리하려고 할 때 문제가 있습니다.CMake Qt UIC가 실패했습니다

나는 다음과 같은 구조를 여기

. 
|___ CMakeLists.txt 
|___ MyProject.pro 
|___ mainwindow.ui 
|___ resource.qrc 
|___ source 
| |___ mainwindow.cpp 
| |___ *.cpp 
|___ include 
| |___ mainwindow.h 
| |___ *.h 

그리고이 나의 cmake

cmake_minimum_required(VERSION 3.2) 

# Project name 
project(project) 

# Tell CMake to compile with C++11 
set(CMAKE_CXX_STANDARD 11) 

# Tell CMake to run moc when needed. 
set(CMAKE_AUTOMOC ON) 

# Tell CMake to run uic when needed. 
set(CMAKE_AUTOUIC ON) 

# Tell CMake to run rcc when needed 
set(CMAKE_AUTORCC ON) 

# Moc generated files are located in the current dir so we need to tell CMake to look for them. 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

# Find Qt5 
find_package(Qt5 COMPONENTS Widgets Core Gui OpenGL REQUIRED) 
# Add Qt5 definitions and includes to build libraries. 
# Widgets add Widgets Core and Gui 
add_definitions(${Qt5Widgets_DEFINITIONS}) 
include_directories(${Qt5Widgets_INCLUDES}) 

add_definitions(${Qt5OpenGL_DEFINITIONS}) 
include_directories(${Qt5OpenGL_INCLUDES}) 


# Find OpenGL 
find_package(OpenGL REQUIRED) 

# Set include directories 
include_directories(${CMAKE_SOURCE_DIR}/include 

# Use Qt5 ressources 
set(RESOURCE resources.qrc) 
# Use Qt5 ui 
set(UI mainwindow.ui) 

# Adding sources 
set(SOURCES 
    source/main.cpp 
    source/mainwindow.cpp 
    source/octree.cpp 
    source/mesh.cpp 
    source/pgm3d.cpp 
    source/glwidget.cpp 
    source/camera.cpp 
    source/scene.cpp 
    source/light.cpp 
    source/obj.cpp 
    source/alignedbox3f.cpp 
    source/wireboundingbox.cpp 

    include/mainwindow.h 
    include/utils.h 
    include/octree.h 
    include/mesh.h 
    include/pgm3d.h 
    include/glwidget.h 
    include/camera.h 
    include/scene.h 
    include/model3d.h 
    include/light.h 
    include/obj.h 
    include/alignedbox3f.h 
    include/wireboundingbox.h) 


add_executable(${PROJECT_NAME} ${UI} ${RESOURCE} ${SOURCES}) 
target_link_libraries(${PROJECT_NAME} ${Qt5Widgets_LIBRARIES} ${Qt5OpenGL_LIBRARIES} ${OPENGL_LIBRARIES}) 

입니다 그리고 나는 다음과 같은 오류가있어 :

File '/*/project/source/mainwindow.ui' is not valid 
AUTOUIC: error: process for ui_mainwindow.h needed by 
"/*/project/source/mainwindow.cpp" 
failed: 
File '/*/project/source/mainwindow.ui' is not valid 

이 에러가 완벽하게 논리적입니다 내 원본 폴더에 ui 파일이 없습니다. 나는 autouic을 사용하는 대신에 ui를 감싸려고했는데, 역시 작동하지 않았다. #include "ui_*.h"를 같은 UI를 파일의 포함을 위해 AUTOUIC 속성 CMake 것 스캔 소스 파일을 활성화 (-

+0

시도를 :


당신을위한 또 다른 옵션은 AUTOUIC을 해제하고 UI 파일의 전체 경로로 qt5_wrap_ui을 사용하는 것입니다. 또한 프로젝트 디렉토리에 오브젝트 파일을 넣지 않는 것이 좋습니다. 청소해라. – Joel

+0

이미 모든 것을 정리하려고 시도했지만 작동하지 않았습니다. – Nico

답변

1

(대상이 생성 가변 CMAKE_AUTOUIC에서 설정된) 목표의 AUTOUIC 속성 발생기의 동작을 정의 또는 #include <ui_*.h>) uic 도구로 자동 처리됩니다.
CMake 3.9에서 또 다른 목표 특성은 AUTOUIC_SEARCH_PATHS을 더했다. 비슷한 질문이 이미 here에 문의되었습니다. 빌드 디렉토리 캐시를 청소하고 다시 시작

set(CMAKE_AUTOUIC OFF) 
set(UI ${CMAKE_CURRENT_LIST_DIR}/mainwindow.ui) 
... 
qt5_wrap_ui(UI_HEADERS ${UI}) 
add_executable(${PROJECT_NAME} ${UI_HEADERS} ${RESOURCE} ${SOURCES})