Mav*_*rik 3 qt cmake moc automocking qt5
我有一个使用Qt5的项目,并且有一个CMakeLists.txt
用于创建Visual Studio解决方案的文件。
这是我的摘录 CMakeLists.txt
cmake_policy(SET CMP0020 NEW)
set(CMAKE_AUTOMOC ON)
find_package(Qt5 REQUIRED COMPONENTS core widgets)
set(COMMON_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/src)
include_directories( ${Boost_INCLUDE_DIRS}
${COMMON_INCLUDE_DIR}
)
file(GLOB_RECURSE COMMON_SOURCE "*.hpp" "*.cpp")
add_library(${PROJECT_NAME} ${COMMON_SOURCE})
qt5_use_modules(${PROJECT_NAME} Widgets)
Run Code Online (Sandbox Code Playgroud)
当我尝试编译代码时,它返回以下错误:
>AUTOMOC : error : C:/Users/.../Projects/MyProject/build/MyProjects_automoc.cpp The file includes the moc file "moc_MyFile.cpp", but could not find header "MyFile{.h,.hh,.h++,.hm,.hpp,.hxx,.in,.txx}" in C:/Users/.../Projects/MyProject/build/
Run Code Online (Sandbox Code Playgroud)
moc文件已自动生成,并且标题不在build文件夹中,而是在src目录中的文件夹中。
如何解决此错误?
最好添加:
set(CMAKE_INCLUDE_CURRENT_DIR ON)
Run Code Online (Sandbox Code Playgroud)
使用AUTOMOC
功能时。此外,这
include_directories(
...
${QT_USE_FILE}
...
)
Run Code Online (Sandbox Code Playgroud)
是一个错误。它应该是:
include(${QT_USE_FILE})
Run Code Online (Sandbox Code Playgroud)
最后,您应该只显式地将源推入编译,而不是标头!如文档中所述:
如果Q_OBJECT
在中foo.h
(即QObject
在头文件中声明),则在相应的中foo.cpp
不要忘记添加#include "moc_foo.cpp"
,最好在文件末尾添加;
如果Q_OBJECT
在中foo.cpp
(即QObject
在源文件中声明),则再次在其foo.cpp
自身中不要忘记添加#include "foo.moc"
,最好在文件末尾添加。
因此,请遵循以下建议并进行更改
file(GLOB_RECURSE COMMON_SOURCE "*.hpp" "*.cpp")
Run Code Online (Sandbox Code Playgroud)
至
file(GLOB_RECURSE COMMON_SOURCE "*.cpp")
Run Code Online (Sandbox Code Playgroud)
您也可以找到其他答案有帮助。您的问题非常相似,因此建议您在下一次发布之前进行更好的搜索。
祝好运。
归档时间: |
|
查看次数: |
11542 次 |
最近记录: |