Qt5 CMake文件为每个请求的Qt组件定义目标,例如Qt5::Gui,Qt5::多媒体等。安装模块的私有标头时,会声明随附的 Qt5::FooPrivate,如果您需要在私有标头上添加依赖项/包含路径,请使用该标头。
不幸的是,在Fedora上,即使没有安装包含私有头文件(例如qt5-qtbase-private-devel(的RPM,Qt5::FooPrivate目标也可用。这导致了我维护的项目的构建失败,如果私有标头可用,我想选择性地构建一些附加功能,而无需用户始终安装它们。
问题是Fedora将私有标头应该驻留的子目录打包在其主要开发包中(例如,qt5-qtbase-devel RPM(。Qt5 CMake Config.cmake 文件检查这些目录是否存在,并假定这意味着私有标头可用。
在调整 Fedora 打包或 Qt5 Config.cmake 文件之前,解决方法是手动检查是否存在的私有文件之一。例如,通过CMake的CHECK_INCLUDE_FILE_CXX辅助功能。