【发布时间】:2011-02-22 19:00:42
【问题描述】:
我想在使用 Cmake 构建的大型跨平台项目中使用 Boost 核心库(如 lambda)和 Boost ASIO 库。我想将 Boost & ASIO 放在我的源代码控制树中,并将其作为 Cmake 项目的一部分进行构建。所以我不想在电脑上“安装”它并与之链接。
如何做到这一点? Boost 是否存在CMakeLists.txt?
【问题讨论】:
标签: c++ boost cmake boost-asio
我想在使用 Cmake 构建的大型跨平台项目中使用 Boost 核心库(如 lambda)和 Boost ASIO 库。我想将 Boost & ASIO 放在我的源代码控制树中,并将其作为 Cmake 项目的一部分进行构建。所以我不想在电脑上“安装”它并与之链接。
如何做到这一点? Boost 是否存在CMakeLists.txt?
【问题讨论】:
标签: c++ boost cmake boost-asio
Boost.Lambda 和 Boost.ASIO 都是仅包含标头的库,因此在您的 CMakeLists.txt 文件中,您可以在 INCLUDE_DIRECTORIES 变量中包含您的 Boost include 目录,并且在构建代码时,标头代码将内置到生成的模块中。
对于您使用非仅包含头文件的库(如 Boost.Filesystem)的情况,您将不得不发布您构建的库,或修改 boost.build 的实验 CMake 版本,您可以在此处找到:@ 987654321@
编辑
我对 Boost.Asio 有点困惑。它不是真正的仅头文件,因为它依赖于 Boost.System,并且可能依赖于 Boost.Thread,具体取决于您如何使用它。
但是,Boost.Asio 是从 Asio (http://think-async.com/) 派生的,它是仅标头。
【讨论】:
#include <boost/shared_ptr.hpp> 之类的操作时,这些头文件中的代码将包含在您的编译中,因此您不必链接外部库。并非所有 Boost 库都是仅头文件,但许多常见的库是.有关仅标头库的更多信息:en.wikipedia.org/wiki/Header-only
有一个项目旨在提供 CMake 版本的 boost。它已经过时了,但CMakeLists.txt 可能会对您有所帮助。您可以查看there。
【讨论】: