GCC 找不到header,但是KDevelop 已经解析了。怎么解决?

GCC can't find header, but KDevelop has parsed it. How to solve?

我添加了一个 KF5 header (#include <KXmlGui/KXMLGUIClient>),当我将鼠标悬停在指令上时,KDevelop 会给我关于这个 header 的信息,但 GCC 永远找不到这个和其他(很少且随机)KF5 headers.

我正在使用 CMake,我使用 api.kde.org 为每个 header 查找(并且 link 反对)每个需要的模块。我想不通。

[  5%] Building CXX object src/CMakeFiles/test_ktechlab.dir/ktechlab.cpp.o
cd /mnt/Volume_3/Gentoo/projects/ktechlab/build/src && /usr/bin/c++  -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I/mnt/Volume_3/Gentoo/projects/ktechlab/build/src -I/mnt/Volume_3/Gentoo/projects/ktechlab/src -I/mnt/Volume_3/Gentoo/projects/ktechlab/build/src/test_ktechlab_autogen/include -I/mnt/Volume_3/Gentoo/projects/ktechlab/ON -I/mnt/Volume_3/Gentoo/projects/ktechlab/build -I/mnt/Volume_3/Gentoo/projects/ktechlab/build/src/core -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/core -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/drawparts -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/electronics -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/electronics/components -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/electronics/simulation -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/flowparts -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/gui -I/mnt/Volume_3/Gentoo/projects/ktechlab/build/src/gui -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/gui/itemeditor -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/languages -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/mechanics -I/mnt/Volume_3/Gentoo/projects/ktechlab/src/micro -I/usr/include/qt5 -I/usr/include/qt5/QtCore -I/usr/lib64/qt5/mkspecs/linux-g++ -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtWidgets -I/usr/include/gpsim -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include  -std=c++0x -fno-operator-names -fno-exceptions -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -Wvla -Wdate-time -Wsuggest-override -Wlogical-op    -fPIC -g -fvisibility=hidden -fvisibility-inlines-hidden   -fno-inline -o CMakeFiles/test_ktechlab.dir/ktechlab.cpp.o -c /mnt/Volume_3/Gentoo/projects/ktechlab/src/ktechlab.cpp
make[2]: Leaving directory '/mnt/Volume_3/Gentoo/projects/ktechlab/build'
make[1]: Leaving directory '/mnt/Volume_3/Gentoo/projects/ktechlab/build'
/mnt/Volume_3/Gentoo/projects/ktechlab/src/ktechlab.cpp:12:10: fatal error: KXmlGui/KXMLGUIClient: No such file or directory
 #include <KXmlGui/KXMLGUIClient>
          ^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [src/CMakeFiles/test_ktechlab.dir/build.make:79: src/CMakeFiles/test_ktechlab.dir/ktechlab.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:279: src/CMakeFiles/test_ktechlab.dir/all] Error 2
make: *** [Makefile:144: all] Error 2
*** Failure: Exit code 2 ***

有什么想法吗?

你将不得不

  1. 确保您已将 XmlGui 作为组件包含在 find_package 命令中。
  2. 请务必在 target_link_libraries 中为相关目标添加 KF5::XmlGui

如果您想知道为什么 target_link_libraries 会影响您的包含路径,您并不孤单 - 但这就是它的工作方式。