在进行cmake编译时出现了以下报错,提示找不到某个头文件
fatal error: 3rdparty/DBoW2/DBoW2/FORB.h: No such file or directory
#include"3rdparty/DBoW2/DBoW2/FORB.h"
但是在vscode中通过Ctrl+鼠标右键
是可以成功跳转到对应的文件中去的,遂定位到CMakeLists.txt文件中.
原因分析
在使用第三方库时,头文件路径和CMakeLists.txt中include_directories
中的路径要对的上
举个栗子来说,某个头文件完整的路径为${PROJECT_SOURCE_DIR}/3rdparty/DBoW2/DBoW2/FORB.h
在代码文件包含头文件时如果写到3rdparty/DBoW2/DBoW2/FORB.h
,那么要想让编译器找到该头文件,CMakeLists.txt中的路径就写到${PROJECT_SOURCE_DIR}
就可以了,即include_directories(${PROJECT_SOURCE_DIR})
这样在编译时根据CMakeLists.txt会去${PROJECT_SOURCE_DIR}
目录下寻找3rdparty/DBoW2/DBoW2/FORB.h
那如果CMakeLists.txt中的路径写成了${PROJECT_SOURCE_DIR}/3rdparty
,代码文件中的头文件路径是3rdparty/DBoW2/DBoW2/FORB.h
就会发生报错,
因为在${PROJECT_SOURCE_DIR}/3rdparty
目录下找不到3rdparty/DBoW2/DBoW2/FORB.h
这个头文件