【发布时间】:2020-03-29 20:43:20
【问题描述】:
我有一个 CMake 项目,我对其进行了简化以找到错误的根源。
该项目有一个 CMakeLists.txt 文件,该文件添加了一个库和一个链接到该库的可执行文件。
库和可执行文件都包含 ui 文件。为了生成 ui 文件的头文件,使用了变量 CMAKE_AUTOUIC。
库和可执行文件都可以包含它们的自己的 ui 文件:它们位于我的构建目录的子目录[projectname]_autogen\include_Debug 中。
但是,我的可执行文件中的另一个文件包含库中的一个文件,该文件又包含一个 ui 文件。在这里我得到了错误:
Error C1083 Cannot open include file: 'ui_MainWidget.h': No such file or directory QtGUI
\QtGUI\src\QtWidgets\include\MainWidget.h 5
我的项目如下所示:
cmake_minimum_required (VERSION 3.14 FATAL_ERROR)
project(QtGUI)
find_package(Qt5 COMPONENTS Widgets Core Gui REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
add_library(QtWidgets
QtWidgets/source/MainWidget.cpp
QtWidgets/include/MainWidget.h
QtWidgets/include/MainWidget.ui
)
target_link_libraries(QtWidgets
PUBLIC
Qt5::Widgets
Qt5::Core
Qt5::Gui
)
target_include_directories(QtWidgets
PUBLIC
QtWidgets/include
)
add_executable(${PROJECT_NAME}
Main/include/MainWindow.h
Main/include/MainWindow.ui
Main/source/MainWindow.cpp
Main/source/Main.cpp
)
target_link_libraries(${PROJECT_NAME}
PUBLIC
QtWidgets
)
target_include_directories(${PROJECT_NAME}
PUBLIC
Main/include
)
还有来自项目QtGUI的MainWindow.cpp文件,发生错误的地方:
#include "MainWindow.h" // inside this project
#include "MainWidget.h" // inside the linked library 'QtWidgets'
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
...
MainWidget.h 看起来像这样
// Qt Includes
#include <ui_MainWidget.h> // inside this project
#include <QWidget>
namespace Ui
{
class MainWidget;
}
class MainWidget : public QWidget
{
Q_OBJECT
public:
...
我在这里缺少什么?
我知道拆分 CMakeLists.txt 并在链接库中有一个自己的 CMakeLists.txt 并将add_library 的东西移到那里会更干净(并对可执行文件做同样的事情,例如application-目录)但是我认为这个例子更容易理解结构。
编辑/添加
我回到这个(不幸的是没有回答)问题并发现了这一点:查看我的 QtGUI-Project(可执行文件)的“配置属性 -> C/C++ -> 附加包含目录”,我看到以下内容:
- QtGUI\build\QtGUI_autogen\include_Debug
- QtGUI\src\Main\include
- QtGUI\src\QtWidgets\include
还有更多。
但所需的ui_MainWidget.h 位于QtGUI\build\QtWidgets_autogen\include_Debug 内部,未设置为附加包含目录。
我手动添加了它,一切正常。
我需要如何修改我的 CMakeLists.txt 文件,以便为我的其他包含目录自动设置此目录?
PS:我也检查了Implementing Qt project through CMake,但在配置中找不到任何相关差异。
【问题讨论】:
标签: visual-studio qt cmake