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 ***
有什么想法吗?
你将不得不
- 确保您已将
XmlGui
作为组件包含在 find_package
命令中。
- 请务必在
target_link_libraries
中为相关目标添加 KF5::XmlGui
。
如果您想知道为什么 target_link_libraries
会影响您的包含路径,您并不孤单 - 但这就是它的工作方式。
我添加了一个 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 ***
有什么想法吗?
你将不得不
- 确保您已将
XmlGui
作为组件包含在find_package
命令中。 - 请务必在
target_link_libraries
中为相关目标添加KF5::XmlGui
。
如果您想知道为什么 target_link_libraries
会影响您的包含路径,您并不孤单 - 但这就是它的工作方式。