我有一个简单的设置,包括main.cpp,mainwindows.cpp,mainwindow.h和mainwindow.ui以及这个cmake文件:
➜ lib pwd
/usr/local/Cellar/hive/2.1.0/libexec/lib
➜ lib ll | grep hadoop-common
-rw-r--r-- 1 christian admin 3.1M Sep 3 07:29 hadoop-common-2.6.0.jar
ui_xxx.h是第一次构建项目时生成的,如果.ui文件和源文件之一被更改,则重新生成。我想要的是让ui_xxx.h每次都重新生成.ui文件在有或没有源更改时更改。
我看过https://github.com/euler0/mini-cmake-qt但是example_automoc项目总是过时的,而且总是要求重建项目。
我的cmake文件中有什么问题吗?或者它是cmake中的错误?
注意:我使用Visual Studio 14 2015生成器在Windows 10上使用qt 5.8和cmake 3.6
更新:删除set(CMAKE_AUTOUIC ON)并使用以下命令指定ui文件:
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(test_qt_with_cmake)
set(CMAKE_CXX_STANDARD 11) # use c++11
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_PREFIX_PATH "C:/Qt/5.8/msvc2015_64")
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5Widgets)
set(PROJECT_INCLUDE_DIR "${PROJECT_SOURCE_DIR}")
######## PROJECT DEPENDENCIES #########
if(WIN32)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${PROJECT_SOURCE_DIR}/windows)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")
#=====================================
include_directories(
${PROJECT_INCLUDE_DIR}
)
add_executable(test_qt WIN32 main.cpp mainwindow.cpp mainwindow.h)
target_link_libraries(test_qt Qt5::Widgets)
add_custom_command(TARGET test_qt POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/windows/bin"
$<TARGET_FILE_DIR:test_qt>)
似乎解决了这个问题。原始问题仍然有效,这是如何在不指定.ui文件的情况下完成此工作(通过调用qt5_wrap_ui)?