如何将Boost库添加到Xcode 11?(C++)

3

我找不到在Xcode 11.2.1中添加boost的方法。我在目标项下找到了一个名为“Frameworks and Libraries”的设置。我把boost文件夹拖到这里,它被添加到项目的“Frameworks”部分。但是,在构建项目时,它会显示“找不到文件”。例如:

#include <boost/lambda/lambda.hpp> 

如果出现“文件未找到”错误,则表示库文件未找到。我没有添加boost,而是将Macports的整个包含区域拖入。尽管Xcode花了一些时间来解析,但我仍然遇到了相同的错误。因此,在“Frameworks”下它有“include”,但是它无法找到相关的hpp文件,即使我检查过了,并且它在boost树中。

我已经通过Macports安装了boost。它位于/opt/local/include/boost。

在Xcode文档中,我看到了对“USER_HEADER_SEARCH_PATHS”的引用。我想到了如何在配置文件中设置它,所以我向项目添加了一个配置文件。我在配置文件中添加了以下内容: USER_HEADER_SEARCH_PATHS = /opt/local/include/boost 但是这也不起作用。(如果我删除boost,那也不起作用)。

当我在项目的“Frameworks”位置中选择“include”时,我看到该对象(Xcode窗口右侧)具有不同的“Identity and Type”设置。我选择了“absolute path”并显示了完整路径/opt/local/include,这是正确的。但是,这也没有解决问题。

我需要在预定义区域中创建链接,以便Xcode可以找到它吗?

我找到了一个相当不好看的解决方法:在STL所在的相同区域中创建指向boost库的符号链接(位于Xcode.app目录结构中)。

使用该设置仅适用于单个文件。我可以将单个文件添加到设置中(通过拖放),但它不会遵循嵌套目录,因此这显然不适用于诸如boost之类的库实现。

1个回答

2
我更喜欢将依赖库放在项目区域内。以下是我测试时的做法:
  1. macOS Command-line App C++ 模板中在 Xcode 中创建一个名为 TestBoost 的新项目
    (现在有一个 TestBoost 文件夹,其中包含 TestBoost.xcodeproj)

  2. 下载最新的 boost boost_1_72_0.tar.gz 并解压缩
    (现在有一个名为 boost_1_72_0 的文件夹)

  3. boost_1_72_0 文件夹复制到项目 TestBoost 文件夹中,使其位于 TestBoost.xcodeproj 的旁边

  4. 在 Xcode 项目导航器中选择 TestBoost 项目 > 选择 TestBoost 目标 > 选择 Build Settings 选项卡

  5. Search Paths 部分中选择 Header Search Path,双击值区域并输入 ${SRCROOT}/boost_1_72_0(保留 non-recursive 标志)

  6. TestBoost 目标中删除默认的 main.cpp(以避免 main 函数混淆),并添加一些来自 boost 的示例进行测试,例如 boost_1_72_0/libs/algorithm/example/search_example.cpp

  7. 构建和运行 > 成功

输出: Xcode 11 boost integration

谢谢!这个可行!我想保留Boost在原位,所以我修改了头搜索路径为/opt/local/include,并将Boost放在那里。 - Anthony Mannucci
一个问题是,“搜索路径”出现在基本选项中,但它没有显示如何添加标题搜索路径,直到我去了“全部”选项卡,在那里看到了它,现在已经更改,出现在基本选项中。有点令人困惑。我查阅了文档,但这并不明显。 - Anthony Mannucci
将boost_1_72_0文件夹复制到TestBoost项目文件夹中,确保它与TestBoost.xcodeproj文件位于同一级别。这样做可以清楚地设置搜索头文件路径。 - Keith John Hutchison

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