Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt5和CMake:为AUTOMOC添加标题_Qt_Cmake_Automocking - Fatal编程技术网

Qt5和CMake:为AUTOMOC添加标题

Qt5和CMake:为AUTOMOC添加标题,qt,cmake,automocking,Qt,Cmake,Automocking,使用CMake的Qt在链接过程中经常会导致问题 在阅读了几篇文章并进行了尝试之后,我发现AUTOMOC接受了用add\u executable提供的源文件,但忽略了用include\u directories(inc)提供的include文件夹中的头文件。将头文件添加到add_executable后,构建成功 但是告诉AUTOMOC头文件的正确方法是什么 在我的cmakecmakelists.txt中,我使用 如果您将头放在src目录中,而不是作为add\u executable中的源文件,这是

使用CMake的Qt在链接过程中经常会导致问题

在阅读了几篇文章并进行了尝试之后,我发现AUTOMOC接受了用
add\u executable
提供的源文件,但忽略了用
include\u directories(inc)
提供的include文件夹中的头文件。将头文件添加到
add_executable
后,构建成功

但是告诉AUTOMOC头文件的正确方法是什么

在我的cmakecmakelists.txt中,我使用


如果您将头放在src目录中,而不是作为
add\u executable
中的源文件,这是否有效?在较新的cmake版本中也可能会更改。Cmake 3+在文档中指出,对于
QOBJECT
Makro,将自动解析具有相同基名的头文件。您运行的是哪个cmake版本?我运行的是cmake 3.5,如果您在src目录中有头文件,它会工作吗?看起来像是一个bug,或者cmake确实没有解析include目录。@Hayt是的。我将.h移到*src/-文件夹,并删除了
add\u executable
上的条目。然后它就起作用了。但这破坏了头和源分离背后的想法。
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories( inc )

set(QT5_MODULES Widgets)
find_package(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})

add_definitions( -DQT_NO_KEYWORDS
                 -DQT_CORE_LIB 
                 -DQT_GUI_LIB 
                 -DQT_WIDGETS_LIB
                 -DQT_NO_DEBUG 
                 -DROSCONSOLE_BACKEND_LOG4CXX
                 -fPIC)

add_executable( MyGui
                src/main.cpp 
                inc/gui.h src/gui.cpp )

ament_target_dependencies( MyGui )
qt5_use_modules(MyGui ${QT5_MODULES})