CMake查找路径包含目录前缀

9

我正在为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前缀。这会导致编译器错误。

我觉得我没有理解你的建议。你是说我应该从 /usr/include/ni 中去掉 ni 吗?这并不能解决包含问题。 - Masala
我的意思是,如果ni在/usr/include中,则OPENNI_INCLUDE_PATH应该是/usr/include而不是/usr/include/ni。这样,您就不需要生成一些脚本进程来更改您的C++源文件和头文件,以查找包含并删除路径。虽然我知道如果是这种情况,/usr/include已经在您的包含中,因此OPENNI_INCLUDE_PATH将是多余的。 - drescherjm
由于XnOs.h文件中再次包含了一个没有ni/前缀的头文件,导致编译错误。编译器随后报错无法找到该文件。 - Masala
然后尝试像我三个帖子之前说的那样包含两条路径。 - drescherjm
如果您的包含目录中同时包含了 /usr/include/ni 和 /usr/include,那么您不应该会出现错误。这里一定是发生了其他的事情。 - drescherjm
显示剩余5条评论
1个回答

13

请确保你使用find_path的路径和#include语句中的路径相同。

如果你想要包含<ni/XnOS.h>,应该写:

find_path(OPENNI_INCLUDE_PATH ni/XnOS.h)

如果您希望包含#include <XnOS.h>,请使用以下内容

find_path(OPENNI_INCLUDE_PATH XnOS.h)

一定要事先确定你想使用哪一个,并且坚持使用它。混合使用同一库的几个包含路径是不必要地使构建环境过于复杂的确保方法。


在我的cmake文件中,我有find_path(OPENNI_INCLUDE_PATH XnOS.h),我想用#include <XnOS.h>来包含头文件,但是这样不起作用。 - Masala
@Masala 那么你的 CMake 脚本中可能存在错误。使用 message 来验证 find_path 返回的值是否符合你的期望。同时,请确保你的目标实际上将该值用作包含目录。 - ComicSansMS
你是对的,错误在于主要的cmake文件而不是查找模块。 - Masala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接