C++ 将包含目录添加到AUTOMOC

C++ 将包含目录添加到AUTOMOC,c++,qt4,makefile,cmake,ros,C++,Qt4,Makefile,Cmake,Ros,我有一个包含QT4 GUI的ROS包。我的代码在文件夹中 项目名称/src/test/*.cpp 我的名字包括在 Project\u name/include/test/*.h 某些qt4 MOC必须创建,因为某些头文件在其类中包含Q_对象 我试过了 设置(CMAKE_AUTOMOC开启) 在cmake文件中,但似乎没有搜索/include/test/文件夹。AUTOMOC声明,它要么在源文件中搜索moc_**.cpp文件,要么在头文件中检查Q_对象 我还尝试在源文件中包含一个moc.***.c

我有一个包含QT4 GUI的ROS包。我的代码在文件夹中
项目名称/src/test/*.cpp
我的名字包括在
Project\u name/include/test/*.h

某些qt4 MOC必须创建,因为某些头文件在其类中包含Q_对象

我试过了
设置(CMAKE_AUTOMOC开启)
在cmake文件中,但似乎没有搜索/include/test/文件夹。AUTOMOC声明,它要么在源文件中搜索moc_**.cpp文件,要么在头文件中检查Q_对象

我还尝试在源文件中包含一个
moc.***.cpp
(例如
/src/test/a.cpp
)。因此它搜索了
a.h
,但在
include/test/a.h
中找不到它

我必须注意,如果我从类中删除Q_对象,编译就会成功,因为include/文件夹是这样添加的:
include\u目录(包括
${catkin_INCLUDE_DIRS}
)

最后,我尝试使用QT4_WRAP_CPP,但由于某种原因,它也找不到MOC,链接失败(尽管在另一个项目中,在cmake文件中使用相同的参数,但有效:/)

编辑: 找到了解决办法。在cpp文件中添加:

#include“../../include/test/moc_a.cpp”

并在include/test中找到了.h

虽然有些东西告诉我这不是正确的方法:在cpp文件中p

\include./../include/test/moc_a.cpp“
,但对于有时可能在更大的项目中作为静态库构建的库,有时甚至是自己构建的库,效果并不好。问题是,include目录可以在不合适的位置创建,这会污染代码,导致VCS出现问题

最适合我。它支持qt4和qt5,不需要在cpp文件中包含moc。语法:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) # including binary dir is
# necessary only if there are classes with Q_OBJECT macro declared in cpp
# files (these cpp files should also contain `# include "x.moc"` at the end).
set(CMAKE_AUTOMOC ON)
include_directories(${Include_Directories})
set(Sources ${Sources_Path}/a.cpp ${Sources_Path}/b.cpp
     ... ${Sources_Path_z}/z.cpp)
qt_wrap_cpp(${Target_Name} Sources ${Headers_Path}/header1.hpp
            ${Headers_Path_2}/header2.hpp ... ${Headers_Path_N}/headerN.hpp)
add_library(${Target_Name} STATIC ${Sources})
# OR add_executable(${Target_Name} ${Sources})
当然,只有包含
Q\u OBJECT
宏且与相应源不在同一目录中的头才能传递到
qt\u wrap\u cpp