【问题标题】:CMake find_path include directory prefixCMake find_path 包含目录前缀
【发布时间】:2014-04-28 19:12:25
【问题描述】:

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

find_path(OPENNI_INCLUDE_PATH XnOS.h)

按预期工作(OPENNI_INCLUDE_PATH 的值为 /usr/include/ni)。 但是,在我的文件中,我必须包含标题

#include <ni/XnOS.h>

如何去掉 ni 前缀,这样我就可以写了

#include <XnOS.h>

第一个包含的问题是 XnCppWrapper.h 被包含在内,并且该文件再次包含一些 Xn*.h 标头,但没有 ni 前缀。这会导致编译器错误。

【问题讨论】:

  • 所有文件都是第一种形式吗?我的意思是您可以将 OPENNI_INCLUDE_PATH 变量调整为 find_path() 返回的内容的父级,然后改用它。
  • 我想,我不明白你的建议。你的意思是我应该从 /usr/include/ni 中绑定 ni 吗?这并不能解决包含问题。
  • 我的意思是如果 ni 在 /usr/include 中,那么 OPENNI_INCLUDE_PATH 应该是 /usr/include 而不是 /usr/include/ni。这样,您不需要生成一些脚本过程来更改您的 c++ 源文件和头文件,以查找包含以删除路径。虽然我确实知道是否是这种情况 /usr/include 已经包含在您的包含中,因此 OPENNI_INCLUDE_PATH 将是多余的。
  • 虽然你总是可以设置(OPENNI_INCLUDE_PATH ${OPENNI_INCLUDE_PATH};${OPENNI_INCLUDE_PATH}/..)
  • 你是对的,ni在/usr/include中。不幸的是,如果我将 OPENNI_INCLUDE_PATH 更改为 /usr/include,它不会改变任何事情。无论哪种情况,我都必须在我的文件中编写#include ,这会导致上述编译错误。

标签: c++ cmake openni


【解决方案1】:

始终让您用于 find_path 的路径与您的 #include 语句中的路径相匹配。

如果你想#include &lt;ni/XnOS.h&gt;你应该写

find_path(OPENNI_INCLUDE_PATH ni/XnOS.h)

如果您想#include &lt;XnOS.h&gt;,请使用

find_path(OPENNI_INCLUDE_PATH XnOS.h)

请务必事先确定要使用哪一个并坚持下去。为同一个库混合多个包含路径无疑会使构建环境过度复杂化。

【讨论】:

  • 在我的 cmake 文件中,我有 find_path(OPENNI_INCLUDE_PATH XnOS.h),我想在 #include &lt;XnOS.h&gt; 中包含标头,但是这样不行。
  • @Masala 那么您的 CMake 脚本中的某个地方可能存在错误。使用message 验证find_path 返回的值是否符合您的期望。还要确保仔细检查您的目标是否实际使用该值作为包含目录。
  • 你是对的,错误出在主 cmake 文件中,而不是在 find 模块中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多