我试图了解在构建 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
)中提供时才必须这样做?
仅当您显式链接实现位时才需要:
但是,一些开发人员可能更喜欢使用单独编译的源代码来构建 Boost.Asio。为此,请将
添加到程序中的一个(且仅有一个)源文件,然后使用项目/编译器设置中定义的 BOOST_ASIO_SEPARATE_COMPILATION 构建程序。或者,可以定义 BOOST_ASIO_DYN_LINK 来构建单独编译的 Boost.Asio 作为共享库的一部分。#include <boost/asio/impl/src.hpp>
来自文档
至于原因为什么“一些开发人员可能更喜欢使用单独编译的源代码来构建Boost.Asio”我能想到的唯一有效原因是稍微改进了编译时间。