如何使AUTOMOC在QT5中查找头文件

时间:2018-10-17 03:58:42

标签: qt cmake automoc

我正在使用Qt 5,并将所有标头放在单独的包含文件夹中,而AUTOMOC无法找到我的标头。

src
 |- sim
     |- include
         |- sim
            |- client.h (contains Q_OBJECT)
     |- client.cpp

我的CMake代码:

set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
add_library(client client.cpp)
target_include_directories(client PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>)
target_link_libraries(client sim Qt5::Widgets)

由于未生成客户端中的QObject MOC类,因此导致对信号的未定义引用。我尝试添加它以强制其搜索client.h ...

#include "moc_client.cpp"

但是我得到了错误

AutoMoc error
-------------
  "/home/peter/projects/smartmouse/smartmouse-simulator/src/sim/client.cpp"
The file includes the moc file "moc_client.cpp", but the header "client.{h,hh,h++,hm,hpp,hxx,in,txx}" could not be found.

我明白为什么会这样,因为文档只说它搜索当前文件夹,所以不会在include/sim文件夹中查找。我的问题是如何让AUTOMOC查找include / sim / client.h?

我也尝试使用qt5_wrap_cpp,但它似乎并未真正调用moc编译器,它仅设置了一些信息。我尝试过:

qt5_wrap_cpp(client include/sim/client.h)

但是据我所知,它没有生成任何cmake目标

编辑:

我还注意到在AutogenInfo.cmake文件中找不到标题:set(AM_HEADERS "")

1 个答案:

答案 0 :(得分:1)

我只是遇到了类似的问题,虽然我对这个答案不满意,但这可能会有所帮助。

CMAKE_AUTOMOC没拿起client.cpp的{​​{1}},但您可以手动将其添加到目标源:

#include "sim/client.h"