gpt4 book ai didi

c++ - CMake:生成单个头文件

转载 作者:行者123 更新时间:2023-12-01 14:08:32 26 4
gpt4 key购买 nike

我目前正在编写一个实用程序库,它将附带一个预编译的 DLL 文件和库的头文件。到目前为止,有一大堆头文件,但我想将它们全部编译成一个头文件(有点像只预处理 #include 指令)。

我想知道,使用 CMake 是否以及如何实现这样的一代。

真挚地,
莱克斯

最佳答案

这些工具并非特定于 CMake,但可以在 CMake 内部调用。

我最近收集了一些链接来为 ApprovalTests.cpp 创建一个单头版本。 .

我最初将它们记录在 an issue in podsiadly/ImageApprovals 的评论中。 : 这个答案是为了让这些信息更容易分享。

C++ - 单头发布脚本

选项:

  • 其中一些工具仅将头文件组合在一起,如果您的主源代码仅包含头文件,这很好。
  • 其他人也有办法拉入 .cpp 文件,或者添加 inline到输出,或者将 .cpp 文件中的所有代码放到输出中的一个位置,这只会编译一次。
  • 这就是 Catch2 的 CATCH_CONFIG_MAIN工作,例如。

  • 自称一般
  • quom
  • 使用 Python
  • 未提及添加inline
  • Heady
  • C++程序
  • 是否具体解释拉入.cpp文件
  • 是否确认需要添加inline从 .cpp 到一些函数:有一个(可定制的)约定用于放置 inline_t在您的源代码中,对于 inline应包含在生成的 header 中
  • Corrade Acme
  • 使用 Python
  • 您创建了一种包含 #include 的模板文件。行,以及各种模板标记、编译指示等
  • 不提拉入.cpp文件?
  • 未提及添加inline

  • 库特定
  • Catch2
  • scripts/generateSingleHeader.py
  • 我认为它会读取此内容并扩展标题:include/catch.hpp
  • 然后查找此文本// ~*~* CATCH_CPP_STITCH_PLACE *~*~ - 它在 include/internal/catch_impl.hpp 中找到, 并按字母顺序粘贴所有 .cpp 文件
  • ImageApprovals
  • single_header.py
  • 有测试:single_header_test.py
  • 应该是可重复使用的
  • 剧本:
  • 遍历所有标题/来源
  • 删除包括 guard 和亲戚 #include s(在 preprocess_file 中)
  • 对文件进行拓扑排序(如果 a.hpp 包括 b.hppb.hpp 将首先处理,SingleHeaderGen.generate )
  • 最后将所有内容合并到一个 header 中,首先是公共(public) header ,#ifdef/#endif 中包含实现文件.
  • .cpp 文件中的代码将只编译一次,当 ImageApprovals_IMPLEMENT定义
  • jfalcou/spy
  • embed.py
  • 删除评论
  • 移除额外的包含防护
  • 不处理 .cpp文件
  • ApprovalTests.cpp
  • build/scripts/ 中实现
  • 不处理 .cpp文件
  • 相关脚本:
  • code_generation.py
  • single_header_file.py
  • embed.py
  • 这是上面 jfalcou/spy 脚本的修改版本。
  • 保留评论
  • 可以选择丢弃特定的线条模式(“可丢弃”)
  • 在评论中包含原始文件的名称
  • 关于c++ - CMake:生成单个头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887018/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com