gpt4 book ai didi

c++ - 将包含目录添加到 AUTOMOC

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:39 25 4
gpt4 key购买 nike

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

一些 qt4 mocs 必须创建,因为一些头文件在它们的类中包含 Q_OBJECT。

我试过设置(CMAKE_AUTOMOC ON)在 cmake 文件中,但它似乎不搜索/include/test/文件夹。 AUTOMOC 指出,要么在源文件中搜索 moc_**.cpp 文件,要么在头文件中检查 Q_OBJECT。

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

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

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

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

#include "../../include/test/moc_a.cpp"

并在 include/test 中找到了 .h。

虽然有些事情告诉我这不是正确的方法 :P

最佳答案

#include "../../include/test/moc_a.cpp" 在 cpp 文件中有效但不适用于有时可能在较大项目中作为静态库构建的库,有时由他们自己。问题是可以在不合适的位置创建 include 目录,这会污染代码,导致 VCS 出现问题。

qt_wrap_cpp最适合我。它同时支持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_OBJECT 宏且与相应源不在同一目录中的 header 必须传递给 qt_wrap_cpp

关于c++ - 将包含目录添加到 AUTOMOC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com