我正在用CMake构建一个Qt项目。
使用macOS或Windows上的cmake-3.8.2一切正常。在Ubuntu 14上,我有cmake-2.8.12.2,moc运行,但uic没有运行。
在CMakeLists.txt
我有:
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
并且.ui文件没有在任何地方指定(但是具有相同的类,所以我有SDFDialog.h,SDFDialog.cpp,SDFDialog.ui)
在带有cmake-2.8.12.2的Ubuntu 14上,这是输出:
$ cmake --build .
Scanning dependencies of target v_repExtSDF_automoc
[ 4%] Automoc for target v_repExtSDF
Generating moc_SDFDialog.cpp
Generating moc_UIFunctions.cpp
Generating moc_UIProxy.cpp
[ 4%] Built target v_repExtSDF_automoc
Scanning dependencies of target v_repExtSDF
[ 8%] Building CXX object CMakeFiles/v_repExtSDF.dir/ImportOptions.cpp.o
[ 12%] Building CXX object CMakeFiles/v_repExtSDF.dir/SDFDialog.cpp.o
/home/user/Development/V-REP_PRO_EDU_V3_4_0_64_Linux.rev9/programming/v_repExtSDF/SDFDialog.cpp:4:26: fatal error: ui_SDFDialog.h: No such file or directory
#include "ui_SDFDialog.h"
^
compilation terminated.
make[2]: *** [CMakeFiles/v_repExtSDF.dir/SDFDialog.cpp.o] Error 1
make[1]: *** [CMakeFiles/v_repExtSDF.dir/all] Error 2
make: *** [all] Error 2
在使用cmake-3.8.2的macOS上正确运行uic:
$ cmake --build .
Scanning dependencies of target v_repExtSDF_autogen
[ 4%] Automatic MOC and UIC for target v_repExtSDF
Generating MOC source v_repExtSDF_autogen/EWIEGA46WW/moc_SDFDialog.cpp
Generating MOC source v_repExtSDF_autogen/EWIEGA46WW/moc_UIFunctions.cpp
Generating MOC source v_repExtSDF_autogen/EWIEGA46WW/moc_UIProxy.cpp
Generating MOC compilation v_repExtSDF_autogen/moc_compilation.cpp
Generating UIC header v_repExtSDF_autogen/include/ui_SDFDialog.h
[ 4%] Built target v_repExtSDF_autogen
...
这是错误还是缺少功能? 如果它是一个缺失的功能,什么是最低要求的cmake版本? 是否有一些解决方法可以在cmake-2.8.12.2上运行uic而不会过多地更改CMakeLists.txt?
答案 0 :(得分:1)
CMake 2.8.6引入了AUTOMOC功能。 CMake 3.0.x引入了AUTOUIC功能。
因此,在Windows和macOS上,您可以使用它们,因为您拥有包含这两个功能的CMake版本。在Ubuntu上,您的2.8.12版本不支持AUTOUIC,因此您无法使用它。
来源:https://cmake.org/cmake/help/v2.8.12/cmake.html
由于您的Ubuntu版本已经很老了,升级到下一个LTS(16.04)可能是个好主意。或者,您可以尝试安装更新的CMake版本:
答案 1 :(得分:0)
感谢@vre和@Antwane提供的信息,我将此解决方法添加到我的CMakeLists.txt中,现在它也支持CMake 2.8:
if(${CMAKE_VERSION} VERSION_LESS 3.0)
qt5_wrap_ui(FORMS SDFDialog.ui)
add_custom_target(uic_cmake28_compat ALL DEPENDS ${FORMS})
endif()
当Ubuntu 14.04即将结束时,我最终会摆脱这种解决方法。