是提升 dynamic_bitset header-only

Is boost dynamic_bitset header-only

根据所有初步迹象,boost dynamic_bitset 只是 header。

documentation表示它只是header:

The class dynamic_bitset is defined in the header boost/dynamic_bitset.hpp. Also, there is a forward declaration for dynamic_bitset in the header boost/dynamic_bitset_fwd.hpp.

没有出现在Getting Started文档的"non header-only"库列表中:

最后,bootstrap.sh --show-libraries 在我的本地系统上使用 Boost 1.70.0 的命令没有将 dynamic_bitset 列为需要单独构建和安装的命令:

The Boost libraries requiring separate building and installation are:
    - atomic
    - chrono
    - container
    - context
    - contract
    - coroutine
    - date_time
    - exception
    - fiber
    - filesystem
    - graph
    - graph_parallel
    - headers
    - iostreams
    - locale
    - log
    - math
    - mpi
    - program_options
    - python
    - random
    - regex
    - serialization
    - stacktrace
    - system
    - test
    - thread
    - timer
    - type_erasure
    - wave

但是,当我使用 bcp --list 列出依赖项以便仅使用此库时,包含 .cpp 文件:

CAUTION: don't know how to trace depenencies through macro: " <memory>" in file: boost/exception/exception.hpp
CAUTION: don't know how to trace depenencies through macro: "PP1" in file: boost/type_traits/detail/is_function_ptr_helper.hpp
CAUTION: don't know how to trace depenencies through macro: "PP1" in file: boost/type_traits/detail/is_function_ptr_helper.hpp
CAUTION: don't know how to trace depenencies through macro: "PP1" in file: boost/type_traits/detail/is_function_ptr_helper.hpp
CAUTION: don't know how to trace depenencies through macro: "PP1" in file: boost/type_traits/detail/is_function_ptr_tester.hpp
CAUTION: don't know how to trace depenencies through macro: "PP2" in file: boost/type_traits/detail/is_function_ptr_tester.hpp
CAUTION: don't know how to trace depenencies through macro: "PP3" in file: boost/type_traits/detail/is_function_ptr_tester.hpp
CAUTION: don't know how to trace depenencies through macro: "PPI" in file: boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
CAUTION: don't know how to trace depenencies through macro: "PPI" in file: boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
CAUTION: don't know how to trace depenencies through macro: "PPI" in file: boost/type_traits/detail/is_mem_fun_pointer_impl.hpp
CAUTION: don't know how to trace depenencies through macro: "PPI" in file: boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
CAUTION: don't know how to trace depenencies through macro: "PPI" in file: boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
CAUTION: don't know how to trace depenencies through macro: "PPI" in file: boost/type_traits/detail/is_mem_fun_pointer_tester.hpp
CAUTION: don't know how to trace depenencies through macro: "BOOST_TYPE_INDEX_USER_TYPEINDEX" in file: boost/type_index.hpp
CAUTION: don't know how to trace depenencies through macro: " <memory>" in file: boost/exception/detail/shared_ptr.hpp
CAUTION: dependent file libs/filesystem/v2 does not exist.
   Found while scanning file boost/filesystem.hpp
CAUTION: dependent file libs/filesystem/v3 does not exist.
   Found while scanning file boost/filesystem.hpp
boost/config/compiler/vacpp.hpp
boost/config/compiler/xlcpp.hpp
boost/config/compiler/xlcpp_zos.hpp
boost/config/stdlib/libcpp.hpp
boost/config/stdlib/libstdcpp3.hpp
boost/config/stdlib/vacpp.hpp
boost/config/stdlib/xlcpp_zos.hpp
boost/predef/language/stdcpp.h
boost/predef/library/std/stdcpp3.h
boost/predef/library/std/vacpp.h
boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp
boost/test/impl/cpp_main.ipp
libs/chrono/src/chrono.cpp
libs/chrono/src/process_cpu_clocks.cpp
libs/chrono/src/thread_clock.cpp
libs/dynamic_bitset/example/example1.cpp
libs/dynamic_bitset/example/example2.cpp
libs/dynamic_bitset/example/example3.cpp
libs/dynamic_bitset/example/timing_tests.cpp
libs/dynamic_bitset/test/dyn_bitset_unit_tests1.cpp
libs/dynamic_bitset/test/dyn_bitset_unit_tests2.cpp
libs/dynamic_bitset/test/dyn_bitset_unit_tests3.cpp
libs/dynamic_bitset/test/dyn_bitset_unit_tests4.cpp
libs/dynamic_bitset/test/dyn_bitset_unit_tests5.cpp
libs/dynamic_bitset/test/test_ambiguous_set.cpp
libs/dynamic_bitset/test/test_lowest_bit.cpp
libs/filesystem/src/codecvt_error_category.cpp
libs/filesystem/src/operations.cpp
libs/filesystem/src/path.cpp
libs/filesystem/src/path_traits.cpp
libs/filesystem/src/portability.cpp
libs/filesystem/src/unique_path.cpp
libs/filesystem/src/utf8_codecvt_facet.cpp
libs/filesystem/src/windows_file_codecvt.cpp
libs/serialization/src/archive_exception.cpp
libs/serialization/src/basic_archive.cpp
libs/serialization/src/basic_iarchive.cpp
libs/serialization/src/basic_iserializer.cpp
libs/serialization/src/basic_oarchive.cpp
libs/serialization/src/basic_oserializer.cpp
libs/serialization/src/basic_pointer_iserializer.cpp
libs/serialization/src/basic_pointer_oserializer.cpp
libs/serialization/src/basic_serializer_map.cpp
libs/serialization/src/basic_text_iprimitive.cpp
libs/serialization/src/basic_text_oprimitive.cpp
libs/serialization/src/basic_text_wiprimitive.cpp
libs/serialization/src/basic_text_woprimitive.cpp
libs/serialization/src/basic_xml_archive.cpp
libs/serialization/src/binary_iarchive.cpp
libs/serialization/src/binary_oarchive.cpp
libs/serialization/src/binary_wiarchive.cpp
libs/serialization/src/binary_woarchive.cpp
libs/serialization/src/codecvt_null.cpp
libs/serialization/src/extended_type_info.cpp
libs/serialization/src/extended_type_info_no_rtti.cpp
libs/serialization/src/extended_type_info_typeid.cpp
libs/serialization/src/polymorphic_binary_iarchive.cpp
libs/serialization/src/polymorphic_binary_oarchive.cpp
libs/serialization/src/polymorphic_iarchive.cpp
libs/serialization/src/polymorphic_oarchive.cpp
libs/serialization/src/polymorphic_text_iarchive.cpp
libs/serialization/src/polymorphic_text_oarchive.cpp
libs/serialization/src/polymorphic_text_wiarchive.cpp
libs/serialization/src/polymorphic_text_woarchive.cpp
libs/serialization/src/polymorphic_xml_iarchive.cpp
libs/serialization/src/polymorphic_xml_oarchive.cpp
libs/serialization/src/polymorphic_xml_wiarchive.cpp
libs/serialization/src/polymorphic_xml_woarchive.cpp
libs/serialization/src/stl_port.cpp
libs/serialization/src/text_iarchive.cpp
libs/serialization/src/text_oarchive.cpp
libs/serialization/src/text_wiarchive.cpp
libs/serialization/src/text_woarchive.cpp
libs/serialization/src/utf8_codecvt_facet.cpp
libs/serialization/src/void_cast.cpp
libs/serialization/src/xml_archive_exception.cpp
libs/serialization/src/xml_grammar.cpp
libs/serialization/src/xml_iarchive.cpp
libs/serialization/src/xml_oarchive.cpp
libs/serialization/src/xml_wgrammar.cpp
libs/serialization/src/xml_wiarchive.cpp
libs/serialization/src/xml_woarchive.cpp
libs/system/src/error_code.cpp
libs/test/src/compiler_log_formatter.cpp
libs/test/src/cpp_main.cpp
libs/test/src/debug.cpp
libs/test/src/decorator.cpp
libs/test/src/execution_monitor.cpp
libs/test/src/framework.cpp
libs/test/src/junit_log_formatter.cpp
libs/test/src/plain_report_formatter.cpp
libs/test/src/progress_monitor.cpp
libs/test/src/results_collector.cpp
libs/test/src/results_reporter.cpp
libs/test/src/test_framework_init_observer.cpp
libs/test/src/test_main.cpp
libs/test/src/test_tools.cpp
libs/test/src/test_tree.cpp
libs/test/src/unit_test_log.cpp
libs/test/src/unit_test_main.cpp
libs/test/src/unit_test_monitor.cpp
libs/test/src/unit_test_parameters.cpp
libs/test/src/xml_log_formatter.cpp
libs/test/src/xml_report_formatter.cpp
libs/timer/src/auto_timers_construction.cpp
libs/timer/src/cpu_timer.cpp

因此我得出结论,bcp 副本不会只包含 header 个文件。

Boost dynamic_bitset 真的是 header-only 吗?如果是,我如何在我的项目中只包含相关的 header?

来自文档:

It should be noted that in practice bcp can produce a rather "fat" list of dependencies, reasons for this include:

  • It searches for library names first, so using "regex" as a name will give you everything in the libs/regex directory and everything that depends on. This can be a long list as all the regex test and example programs will get scanned for their dependencies. If you want a more minimal list, then try using the names of the headers you are actually including, or use the --scan option to scan your source code.

  • ...

因此,您得到了一个庞大的依赖项列表,因为搜索包括本身不是 header-only 的测试和示例,并且还有更多非 header-only 依赖项。

Is Boost dynamic_bitset really header-only

我认为没有理由怀疑这一点。

if so, how do I include only the relevant headers in my project?

根据引用的建议,您可以改为尝试:bcp --list boost/dynamic_bitset.hpp 以获得更精简的列表。