cmake 2.8.12.2 自动UIC不起作用:错误或缺少功能



我正在用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版本是多少?是否有一些解决方法可以使 uic 也在 cmake-2.8.12.2 上运行,而无需过多地更改 CMakeLists.txt?

AUTOMOC 功能由 CMake 2.8.6 引入。AUTOUIC 功能由 CMake 3.0.x 引入。

因此,在Windows和macOS上,您可以使用它们,因为您拥有包含这两个功能的CMake版本。在 Ubuntu 上,您的 2.8.12 版本不支持 AUTOUIC,因此您无法使用它。

来源: https://cmake.org/cmake/help/v2.8.12/cmake.html

由于您的 Ubuntu 版本非常旧,也许升级到下一个 LTS (16.04( 是个好主意。或者,您可以尝试安装更新的 CMake 版本:

  • 要么使用 PPA 为您的 Ubuntu 14.04 提供 CMake 3。例如 https://launchpad.net/~george-edison55/+archive/ubuntu/cmake-3.x
  • 或者自己编译: https://cmake.org/install/在这种情况下,您可能会遇到一些有关过时依赖项的问题。

感谢@vre和@Antwane提供的信息,我将此解决方法添加到我的CMakeList中.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 生命周期结束时,我最终会摆脱这种解决方法。

最新更新