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里面的PRIVATEINTERFACE是有不同用途的.