CMake编译Qt项目出现qrc_icons.cpp不是目录警告该如何解决?
警告触发原因
这个警告是GCC/Clang编译器前端抛出的,触发的核心原因是:你将qt5_add_resources输出的源文件路径,错误配置到了编译器的头文件搜索目录参数中。
qt5_add_resources(RESOURCES xxx.qrc)执行后,${RESOURCES}变量存储的是生成的qrc_icons.cpp文件的完整绝对路径,该文件是需要参与编译的C++源文件,不是目录。- 如果你在CMake配置中错误地将
${RESOURCES}传入了include_directories、target_include_directories这类用于配置头文件搜索路径的接口,CMake会将该路径拼接到编译器的-I参数后。编译器读取-I参数时发现后跟的是普通文件而非目录,就会抛出xxx: not a directory的警告。 - 警告在编译
main.cpp时触发,是因为编译每个源文件时都会加载全局的头文件搜索路径配置。
解决方案
- 检查项目所有CMakeLists.txt中的头文件搜索路径配置,找到将
${RESOURCES}传入include_directories/target_include_directories的错误代码行,直接删除即可。 - 确认
${RESOURCES}变量被正确添加到目标的源文件列表中,正确写法参考:
add_executable(project App/main.cpp ${RESOURCES} # 其他源文件 )
- 修改完成后删除构建目录的所有缓存文件,重新执行CMake配置和构建即可消除警告。
内容的提问来源于stack exchange,提问作者Piotr Chmielewski
相关产品推荐
相关产品推荐

