Qt的GCC和LLVM版本编译promote组件失败的处理
Qt GCC和LLVM版本编译失败的解决措施
以前都是使用MSVC套件来编译Qt的项目. 新的公司因为是在Linux下开发, 不得不使用我一直很不喜欢的GCC, 慢慢地, 其实也就习惯了. 再后来, 因为要交叉编译Windows版本, mingw也不得不用了起来.
前几天Qt发布了6.8 LTS版本, 在家里的电脑升级的时候想想就顺便把LLVM套件也给装上了. 然后就发现编译失败了.
我在界面里面定义了一个自定义的QWidget
的ui界面类, Pageing
.
然后, 在另一个ui界面类SampleListForm
里面, 将一个QWidget
给promote到了Paging
.
用MSVC编译啥问题没有, 尝鲜使用LLVM, 就编译失败了, ui_SampleListForm.h
里面报错说找不到Paging.h
. 我想会不会是没有装好的缘故, 于是在另一台电脑也升级了6.8, 装了LLVM编译套件, 发现也不行. 然后又安装了GCC, 也是同样的编译错误, 只有MSVC编译是正确的.
给Qt提了bug, 几次交流之后, 对方建议我在CMakeLists.txt
中增加下面一行: target_include_directories(testprj PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
.
我的项目目录结构不是这样的, 但是意思我是懂得. 于是这样修改:
target_include_directories(${proj_name} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/widgets)
, 果然就编译通过了.
我出问题的项目是一个大项目里面的dll子项目, 我在里面只写了target_include_directories(${proj_name} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} )
.
得到的一个知识就是target_include_directories
里面的PRIVATE
和INTERFACE
是有不同用途的.