【问题标题】:build Qt5 project with cmake使用 cmake 构建 Qt5 项目
【发布时间】:2016-11-16 09:49:19
【问题描述】:

我正在尝试用 cmake 构建一个 Qt5 项目,这是我的 cmake 代码(VS2013 作为生成器):

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)

project      (pcl-visualizer)
set(CMAKE_PREFIX_PATH "C:\\Qt2013\\5.7\\msvc2013_64")
set(VTK_DIR "C:\\Program Files\\PCL 1.8.0\\3rdParty\\VTK\\lib\\cmake\\vtk-7.0")
find_package(Qt5Widgets)
find_package (VTK REQUIRED)
find_package (PCL 1.8 REQUIRED)

include_directories (${PCL_INCLUDE_DIRS})
link_directories    (${PCL_LIBRARY_DIRS})
add_definitions     (${PCL_DEFINITIONS})

include_directories(${Qt5Widgets_INCLUDES})
add_definitions(${Qt5Widgets_DEFINITIONS})
set(CMAKE_CXX_FLAGS "${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
ADD_DEFINITIONS (${QT_DEFINITIONS})

set  (project_SOURCES main.cpp pclviewer.cpp)
set  (project_HEADERS pclviewer.h)
set  (project_FORMS   pclviewer.ui)
set  (VTK_LIBRARIES   vtkRendering vtkGraphics vtkHybrid QVTK)

ADD_DEFINITIONS (${QT_DEFINITIONS})

ADD_EXECUTABLE  (pcl_visualizer ${project_SOURCES}
                                ${project_FORMS_HEADERS}
                                ${project_HEADERS_MOC})

TARGET_LINK_LIBRARIES (pcl_visualizer ${QT_LIBRARIES} ${PCL_LIBRARIES} ${VTK_LIBRARIES})

它配置并生成。

-- 配置完成 -- 生成完成 -- 构建文件已写入:C:/ysong/pcl/doc/tutorials/content/sources/qt_visualizer/build 10:40:24: Le processus "C:\Program Files\CMake\bin\cmake.exe" s'est 终端正常化。 10:40:24:不可能 de trouver un Makefile。 Vérifiez vos 编译选项。错误的错误 编译/部署 du projet pcl_visualizer(套件:桌面 Qt 5.6.1 MSVC2013 64bit2) 执行步骤“Make”时 10:40:24: Temps écoulé : 00:01.

但是项目没有构建(没有 ui_pclviewer.h)。我应该怎么做才能完全构建我的项目。

【问题讨论】:

  • CMake 不构建项目。 CMake 只是准备构建环境。打开 .sln 项目(我假设你在 Windows 上)并从 Visual Studio 构建
  • 是的,我有一个 sln 项目。但是要构建一个 qt 项目,qt 必须将“.ui”文件编译为“ui_.h”文件,以便在 Visual Studio 中使用。我必须手动执行此操作吗?
  • cmake.org/cmake/help/v3.0/manual/… 你可能想要AUTOMOC和AUTOUIC

标签: c++ qt cmake qt5 point-cloud-library


【解决方案1】:

this post 一样,首先需要清理您的 CMake 文件。

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)

2.6 太旧了,我敢肯定你真的不需要与旧版本兼容。至少使用2.8.11

set(CMAKE_PREFIX_PATH "C:\\Qt2013\\5.7\\msvc2013_64")

在你的路径中避免使用“\”,迟早你会遇到麻烦。改用“/”,即使在 Windows 上:

set(CMAKE_PREFIX_PATH "C:/Qt2013/5.7/msvc2013_64")

您也可以设置Qt5_DIR 而不是CMAKE_PREFIX_PATH,就像您为 vtk 所做的那样。

不要一一查找每个 Qt 模块:

find_package(Qt5Widgets)
find_package(Qt5Gui)
find_package(Qt5Core)

一键添加:

find_package(Qt5 REQUIRED Widgets)

Widgets 就足够了,因为 Qt 的包文件处理依赖关系。添加REQUIRED 以确保找到包。

使用imported targetsAUTOMOCAUTOUIC,您的cmake 项目应如下所示:

cmake_minimum_required(VERSION 2.8.11)

project(pcl-visualizer)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(Qt5_DIR "C:/Qt2013/5.7/msvc2013_64/lib/cmake/Qt5")
set(VTK_DIR "C:/Program Files/PCL 1.8.0/3rdParty/VTK/lib/cmake/vtk-7.0")
find_package(Qt5 REQUIRED Widgets)
find_package (VTK REQUIRED)
find_package (PCL 1.8 REQUIRED)

include_directories (${PCL_INCLUDE_DIRS})
link_directories    (${PCL_LIBRARY_DIRS})
add_definitions     (${PCL_DEFINITIONS})

set  (project_SOURCES main.cpp pclviewer.cpp)
set  (project_HEADERS pclviewer.h)
set  (project_FORMS   pclviewer.ui)
set  (VTK_LIBRARIES   vtkRendering vtkGraphics vtkHybrid QVTK)

add_executable(pcl_visualizer ${project_SOURCES}
                              ${project_FORMS}
                              ${project_HEADERS})

target_link_libraries(pcl_visualizer Qt5::Widgets ${PCL_LIBRARIES} ${VTK_LIBRARIES})

【讨论】:

  • @wasthishelpful,变量${project_FORMS_HEADERS}${project_HEADERS_MOC}是怎么定义的?它们是从${project_FORMS}${project_HEADERS} 自动生成的吗?或者这是一个错字?感谢您的澄清。
  • 为了使 CMakeLists 具有可移植性,应将变量设置为系统中的环境变量。这样其他用户就可以编译软件而无需编辑项目的 CmakeLists.txt
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 2017-10-25
  • 2013-02-24
相关资源
最近更新 更多