C++ CMake查找路径包含目录前缀

C++ CMake查找路径包含目录前缀,c++,cmake,openni,C++,Cmake,Openni,我正在为OpenNI编写一个最小的Find*.cmake。查找我编写的头文件 find_path(OPENNI_INCLUDE_PATH XnOS.h) 它按预期工作(OPENNI_INCLUDE_PATH的值为/usr/INCLUDE/ni)。 但是,在我的文件中,我必须包含带有 #include <ni/XnOS.h> #包括 我怎样才能去掉ni前缀,这样我就可以写了 #include <XnOS.h> #包括 第一个include的问题是包含了一个XnCp

我正在为OpenNI编写一个最小的Find*.cmake。查找我编写的头文件

find_path(OPENNI_INCLUDE_PATH XnOS.h)
它按预期工作(OPENNI_INCLUDE_PATH的值为/usr/INCLUDE/ni)。 但是,在我的文件中,我必须包含带有

#include <ni/XnOS.h>
#包括
我怎样才能去掉ni前缀,这样我就可以写了

#include <XnOS.h>
#包括

第一个include的问题是包含了一个XnCppWrapper.h,该文件再次包含一些Xn*.h头,但没有ni前缀。这将导致编译器错误。

始终使用于
查找路径的路径与
\include
语句中的路径匹配

如果你想
#包括
,你应该写

find_path(OPENNI_INCLUDE_PATH ni/XnOS.h)
如果您想包含
,请使用

find_path(OPENNI_INCLUDE_PATH XnOS.h)

只要事先确定你想用哪一种,并坚持下去。为同一个库混合多个include路径肯定会使构建环境不必要地过于复杂。

所有文件都是第一种形式吗?我的意思是,您可以调整OPENNI_INCLUDE_PATH变量,使其成为find_PATH()返回内容的父变量,并使用它。我想,我不明白您的建议。你的意思是我应该从/usr/include/ni绑定ni吗?这并不能解决包含问题。我的意思是,如果ni位于/usr/include中,那么OPENNI_include_路径应该是/usr/include,而不是/usr/include/ni。这样,您就不需要生成一些脚本过程,可以更改C++源文件和查找包含删除路径的包含的头文件。虽然我知道是否是这种情况,/usr/include将在您的include中准备就绪,因此OPENNI_include_路径将是多余的。尽管您可以随时设置(OPENNI_include_路径${OPENNI_include_PATH};${OPENNI_include_路径}/),但您是对的,ni在/usr/include中。不幸的是,如果我将OPENNI_INCLUDE_路径更改为/usr/INCLUDE,它不会改变任何东西。在任何一种情况下,我都必须在我的文件中写入#include,这会导致上述编译错误。在我的cmake文件中,我有
find_path(OPENNI_include_path XnOS.h)
,我想在头中包含
#include
,但它不能以这种方式工作。@Masala那么你的cmake脚本中可能有一个bug。用于验证
find_path
返回的值是否符合您的期望。还要确保仔细检查您的目标是否实际使用该值作为包含目录。您是对的,错误出现在主cmake文件中,而不是在“查找”模块中。