设置适当的柯南生成器以生成所需的配置 cmake 文件
- 我使用
generators = "cmake_find_package_multi" 中提到的this issue(又是我自己的问题)
- Conan 现在生成了很多
<PKG>Config/Target.cmake 文件(在我的例子中),我们需要指向 cmake 以在 conan docs 和此处 in cmake docs 中指定的文件夹中查找配置
- 此时
AUTOMOC、AUTOUIC 和 AUTORCC 应该可以使用以下配置:
find_package(Qt5 CONFIG REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
我后来遇到了两种不同的问题
AutoMoc error
-------------
"SRC:/src/<thisfilename>.cpp"
contains a "Q_OBJECT" macro, but does not include "<thisfilename>.moc"!
Consider to
- add #include "<thisfilename>.moc"
- enable SKIP_AUTOMOC for this file
这可以通过将 Q_OBJECT 类移动到标题中或在类下面添加 #include <thisfilename.moc> 来解决,cmake 会自动填充此文件的直接路径而无需路径嵌套。例如,如果我有一个名为“test.cpp”的文件,我必须这样做:
#include <QObject>
class TestObject : public QObject
{
Q_OBJECT
};
#include <test.moc>
未解决的对 metaObject、qt_metacast、qt_metacall 等的引用的链接器错误...
在那种情况下,这意味着 moc 生成的源代码没有被添加到编译中。
它可以通过在 add_executable 调用中添加头文件和 .cpp 文件来解决:
file(GLOB SOURCES
include/*.h
src/*.cpp
)
add_executable(${PROJECT_NAME} ${SOURCES})
或者在 Q_OBJECT 的 cpp 实现文件中包含一个文件 #include <moc_thisfilename.cpp>,如下所示:
test.hpp
#include <QObject>
class TestObject : public QObject
{
Q_OBJECT
};
test.cpp
#include <test.hpp>
#include <moc_test.cpp>
我还没有找到一种方法来忘记这个 moc 生成魔法,并在包含包含 Q_OBJECT 相关内容的标头时以智能方式使 CMake 自动包含所有内容