【问题标题】:C++, CMake, and Xcode Symbol NavigatorC++、CMake 和 Xcode 符号导航器
【发布时间】:2020-08-27 02:36:20
【问题描述】:

我正在创建使用 CMake 生成 XCode 项目的 C++ 项目。它使用带有代码行的 Boost FileSystem

  SET(BOOST_ROOT ~/libs/boost/boost_1_64_0)
  set(Boost_USE_STATIC_LIBS   ON)
  FIND_PACKAGE(Boost 1.64 EXACT REQUIRED COMPONENTS filesystem)
  include_directories(${Boost_INCLUDE_DIRS})

但现在 Symbol Navigator 被数千个 Boost 类所污染

有没有办法排除这些?由于我的项目是在 cmake 中生成的,目前还不清楚我有什么权力。我猜测并说我的包含最初是 #include "boost/filesystem.hpp" 并将其更改为 #include <boost/filesystem.hpp> 但这似乎没有什么不同。接下来,我认为 cmake 包含目录命令上可能有一个标志,所以尝试了include_directories(SYSTEM ${Boost_INCLUDE_DIRS}),但没有奏效。

有没有办法表明 xcode 不应该在导航器中包含这些目录?

【问题讨论】:

  • (现在我可以在这里发表评论 \o/)boost 库是否是项目的一部分:你能在文件导航器中、框架或其他东西下看到它们吗?您如何链接库:通过在 cmake 中设置链接标志或在 Xcode gui 中添加它?另外,您是否尝试使用新设置创建一个新的 Xcode 项目?
  • 看起来问题可以使用 SYSTEM 指示符解决。在包含目录 (cmake.org/cmake/help/latest/command/include_directories.html) 上,同时旧类真的 喜欢闲逛,因此关闭 Xcode 并手动删除派生数据有助于清除错误值。
  • 另外,如果包含目录与项目路径混在一起,那么它会假定它不是系统的,但是如果您在当前源树/项目之外添加一个目录,那么它可能会自动将其识别为使用原始方法和@puio 方法的系统目录。

标签: c++ xcode cmake


【解决方案1】:

使用底部的过滤器:

  • 仅显示类和协议:点击底部过滤栏中的类和协议按钮 ()。
  • 仅显示项目符号:点击底部过滤栏中的项目符号按钮 ()。

https://help.apple.com/xcode/mac/current/#/dev2241bf769


尝试为目标设置HEADER_SEARCH_PATHS,而不是设置include_directories

您可能需要编辑 Boost_INCLUDE_DIRS 以使其成为空格分隔的带引号的文件路径字符串。

set_target_properties(${target_name} PROPERTIES XCODE_ATTRIBUTE_USER_HEADER_SEARCH_PATHS "${Boost_INCLUDE_DIRS}")

https://help.apple.com/xcode/mac/current/#/itcaec37c2a6

【讨论】:

  • 我觉得这应该可以工作,但是 Xcode 很乐意将所有 1410 类添加到项目符号中,所以这个标志的效果有限。我怀疑它与 #include 和包含目录的 cmake 添加有关?
  • 谢谢,到目前为止,当仅使用 HEADER_SEARCH_PATHS 属性时,它仍然显示所有符号。我希望这可能是由于缓存造成的,所以我稍微摆弄了一下,但到目前为止仍然看到一切都进来了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 2013-10-29
  • 1970-01-01
  • 2021-10-09
  • 2013-06-22
相关资源
最近更新 更多