cmake 不使用 QT4_automoc 生成 Qt moc 文件

Posted

技术标签:

【中文标题】cmake 不使用 QT4_automoc 生成 Qt moc 文件【英文标题】:cmake doesn't generate Qt moc files using QT4_automoc 【发布时间】:2011-04-28 18:14:59 【问题描述】:

我正在尝试在 Windows 7 上使用 Visual Studio 2010 编译器在 Qt 中编译一个小测试应用程序 basic layout example。

我正在使用 cmake (2.8.4) 和 nmake 来构建示例,但它无法生成 moc 文件。 这会导致编译错误:

无法打开包含文件:'dialog.moc':没有这样的文件或目录。

我的 CMakeLists.txt 中应该能够生成 moc 文件的规则是:

set(all_SOURCES main.cpp dialog.cpp)
QT4_AUTOMOC($all_SOURCES)

任何想法为什么没有生成 moc 文件或解决此问题的提示?

谢谢!

【问题讨论】:

【参考方案1】:

收集你需要的所有头文件,然后将这些头文件传递给 qt4_wrap_cpp,然后将这些文件添加到你的库/可执行文件中。

FIND_PACKAGE(Qt4 REQUIRED)
include($QT_USE_FILE)
set (FOO_MOC_HEADERS foo.h)
qt4_wrap_cpp (FOO_MOC_OUTFILES $FOO_MOC_HEADERS)
add_library (foo SHARED $FOO_SOURCE_FILES $FOO_MOC_OUTFILES)

【讨论】:

不知何故(即使我尝试了几次)它现在似乎确实可以与 qt4_automoc 一起使用,使用 set(all_SOURCES main.cpp dialog.cpp) QT4_AUTOMOC($all_SOURCES) add_executable(Test $ all_SOURCES) target_link_libraries(Test $LINK_LIBRARIES) 我认为您应该更喜欢 qt4_wrap_cpp,将其输出添加到您的库中,而不是手动包含 .moc 文件。我发现过去更可靠。

以上是关于cmake 不使用 QT4_automoc 生成 Qt moc 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CMAKE生成makefile文件

MSVC 不通过 cmake 生成 lib

如何使用CMake项目生成提前的QML缓存?

CMake 为 VS 项目生成循环依赖,但不生成文件。如何避免?

cmake基础教程(40)生成器表达式

cmake基础教程(40)生成器表达式