我正在使用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 "")
答案 0 :(得分:1)
我只是遇到了类似的问题,虽然我对这个答案不满意,但这可能会有所帮助。
CMAKE_AUTOMOC
没拿起client.cpp
的{{1}},但您可以手动将其添加到目标源:
#include "sim/client.h"