了解boost.asio的BOOST_ASIO_SEPARATE_COMPILATION

问题描述 投票:0回答:1

我试图了解在构建 BOOST_ASIO_SEPARATE_COMPILATION

 时何时应用 
define
 
boost.asio
。在链接的文档中它指出

默认情况下,Boost.Asio 是一个仅包含头文件的库。然而,一些开发人员可能更喜欢使用单独编译的源代码来构建 Boost.Asio。

我不确定“这里单独编译源代码”是什么意思。这是否对应于单独编译的静态库、共享库或者外部提供的静态/共享库?

以我的代码为例:

我在同一个项目(*.a 文件)中创建了几个不同的静态库,其中都包含各种

boost.asio
标头。然后它们都链接到我的根目录中的可执行文件
CMakeLists.txt

# initial cmake setup ... then:
add_executable(app main.cpp)

target_link_libraries(app PRIVATE my_lib_using_boost_1 my_lib_using_boost_2)

在这种情况下是否有必要添加

BOOST_ASIO_SEPARATE_COMPILATION
,例如:

add_compile_definition(BOOST_ASIO_SEPARATE_COMPILATION)

或者只有当

boost.asio
在单独的外部存档(如我自己没有编译的
boost.a
)中提供时才必须这样做?

c++ cmake boost-asio
1个回答
0
投票

仅当您显式链接实现位时才需要:

但是,一些开发人员可能更喜欢使用单独编译的源代码来构建 Boost.Asio。为此,请将

#include <boost/asio/impl/src.hpp>
添加到程序中的一个(且仅有一个)源文件,然后使用项目/编译器设置中定义的 BOOST_ASIO_SEPARATE_COMPILATION 构建程序。或者,可以定义 BOOST_ASIO_DYN_LINK 来构建单独编译的 Boost.Asio 作为共享库的一部分。

来自文档

至于原因为什么“一些开发人员可能更喜欢使用单独编译的源代码来构建Boost.Asio”我能想到的唯一有效原因是稍微改进了编译时间。

© www.soinside.com 2019 - 2024. All rights reserved.