记录 CMake 脚本

2024-03-06

我发现自己处于一种情况,我想准确记录大量自定义 CMake 宏和函数,并且想知道如何做到这一点。

首先想到的是简单地使用内置语法并且仅使用文档脚本,如下所示:

# -----------------------------
# [FUNCTION_NAME | MACRO_NAME]
# -----------------------------
# ... description ...
# -----------------------------

这可以。但是,我想使用常见的文档生成器(例如 doxygen)来生成任何人都可以阅读的外部文档without查看实现(这是常见场景)。

一种方法是编写一个简单的解析器,直接从 CMake 脚本生成具有适当签名和文档的相应 C/C++ 标头,该标头可以由 doxygen 或类似工具进行处理。人们还可以手动维护这样的标头 - 这显然是乏味且容易出错的。

还有其他方法可以使用带有 CMake 脚本的文档生成器吗?


这是我能得到的最接近的。以下是使用 CMake 2.8.10 进行测试的。目前,CMake 3.0正在开发中,它将获得基于CMake的新文档系统Sphinx http://sphinx-doc.org/ and 重构文本 http://de.wikipedia.org/wiki/ReStructuredText。我想这将带来记录模块的新方法。

CMake 2.8 可以从模块中提取文档,但仅考虑文件开头的文档。所有文档都作为 CMake 注释添加,以单个注释开头#。双倍的##将被忽略(因此您可以向文档添加注释)。文档的结尾由第一个非注释行(例如空行)标记

第一行给出了模块的简要描述。它必须开始于-并以句号结束.或空行。

# - My first documented CMake module.
# description

或者 # - 我的第一个记录的 CMake 模块 # # 描述

在 HTML 中,以两个或多个空格开头的行(在#) 采用等宽字体格式。

Example:

# - My custom macros to do foo
#
# This module provides the macro foo().
# These macros serve to demonstrate the documentation capabilietes of CMake. 
#    
#    FOO( [FILENAME <file>]
#         [APPEND]
#         [VAR <variable_name>]
#    )
#
# The FOO() macro can be used to do foo or bar. If FILENAME is given, 
# it even writes baz. 

MACRO( FOO )
 ...
ENDMACRO()

要仅为您的自定义模块生成文档,请致电

cmake -DCMAKE_MODULE_PATH:STRING=. --help-custom-modules test.html

Setting CMAKE_MODULE_PATH允许您定义其他目录来搜索模块。否则,您的模块需要位于默认的 CMake 位置。--help-custom-modules将文档生成限制为自定义、非 CMake 标准模块。如果您给出文件名,则文档将写入该文件,否则写入标准输出。如果文件名具有可识别的扩展名,则文档将采用相应的格式。

可以采用以下格式:

  • .html用于 HTML 文档
  • .1 to .9用于手册页
  • .docbook对于文档书
  • 其他任何内容:纯文本
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录 CMake 脚本 的相关文章

随机推荐

  • 有没有办法在所有 jquery 脚本运行后查看网页的源代码?

    我目前使用 Chrome Firefox 进行 Web 开发 有没有一个插件 或者我只是另一种方式 您可以在所有 jQuery 插件运行后查看 HTML 源代码 我只是想看看 jQuery 修改了什么以及如何修改 HTML Firebug
  • 带有 gcc stdlib 的 icpc C++11

    我正在使用 icpc 非可选 并且使用 std c 0x 进行编译 因此我可以使用ambas 然而 当我这样做时 它会使用 gcc stdlib 创建 havok 其中一个支持另一个不支持的功能 我尝试过定义 GXX EXPERIMENTA
  • 使用指定存储库中的 Git 分支动态填充 Jenkins Choice 参数

    我有一个参数化的 Jenkins 作业 它需要输入特定 Git 存储库中的特定 Git 分支 目前该参数是一个字符串参数 有没有办法让这个参数成为选择参数并用Git分支动态填充下拉列表 我不想要求有人在每次创建新分支时手动配置下拉列表来维护
  • php-fpm 进程监控/分析

    我最近遇到了 php fpm 进程使用 如活动进程数量 的问题 达到了最大可用进程的峰值 并停止执行其他脚本 直到有问题的进程完成 更详细一点 我当前的 php fpm 设置是 pm static pm max children 100 我
  • 在 Java 中以编程方式清除控制台

    我创建了一个示例 Java 应用程序 我想清除窗口选项 即 Register Login Clear 如果用户按 3 我需要以编程方式清除所有选项 就像是Console clear 有什么办法可以用 Java 做到这一点吗 您将需要输出一堆
  • 如何将较小的位图复制到较大的位图?

    希望这应该是一个简单的问题 我正在尝试将一系列小位图复制到较大的位图中 将它们并排排列 像素中没有任何间隙或重叠 例如 如果我有 3 个正方形位图 我想将它们复制到一个细长的矩形中 我知道如何做相反的事情 即从较大的位图创建一个小位图 但不
  • 与应用内购买的“无法连接到 iTunes”相关的供应商 ID 错误消息是什么?

    这是一条神秘的错误消息 LaunchServices 无法获取供应商ID 我猜这是某个苹果服务器现在宕机了 很快就会恢复在线 背景 我的 iOS 应用程序之前没有批准的应用内购买 因此这仍然是必须提交新版本应用程序以及新的应用内购买产品的阶
  • Angular 5 无法找到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如数组

    我正在尝试从我的后端 api 返回产品并将其显示在我的前端页面上 当我执行 ngFor 循环时 它给了我一个错误 这是我的代码 我的后端API data 0 name perferendis totalPrice 323 76 rating
  • Rails 设计:after_confirmation

    有没有办法创建一个after confirmation do something 目标是在用户确认使用 Devise 后发送电子邮件 confirmable 我正在使用 Devise 3 1 2 它有一个占位符方法after confirm
  • 如何使用stdext::hash_map?

    我想看一个如何正确重写 stdext hash compare 的简单示例 以便为我自己的用户定义类型定义新的哈希函数和比较运算符 我正在使用 Visual C 2008 这就是你可以做到的 class MyClass Hasher con
  • Vue Axios 动态 URL

    我想在 vue js 应用程序中动态创建 axios post 操作的 URL 路径 这是动作 editProduct function dispatch commit payload axios put http localhost 80
  • 如何删除单个链表中的循环?

    我不确定在不使用 O N 内存和标志的情况下如何找到循环的开始 找到循环内部的一个节点 具体参见1800 INFORMATION的回答 我们称这个节点为C 通过将指针从 C 前进直到再次到达 C 来求出循环的长度 循环的长度是它所采取的步数
  • 如何在方案中编写程序来查找数字列表的因数

    这是单个整数的代码 它如何扩展到函数列表 define factors n define factors d cond gt d n list modulo n d 0 cons d factors d 1 else factors d 1
  • Java日历的setMonth方法工作错误吗?

    我有如下的小代码 我预计结果应该是7 但它打印了6 如果我取消注释该行tmp get Calendar MONTH 它运行正常 打印7 请告诉我原因 我在 MacOS 中使用 JDK 1 7 0 25 public static void
  • 安装 scrapy 清理失败

    我一直在努力得到Scrapy使用 pip 安装 以便抓取 NBA 赛季的赛程表和得分 在过去的 6 个小时里 我一直在努力尝试安装它 我已经逐字按照设置说明进行操作 但仍然无法使其正常工作 任何帮助将不胜感激 终端窗口输出如下 非常感谢 顺
  • Keycloak 重定向 URI 正在将端口 0 添加到 url

    在keycloak 中遇到redirect uri 错误 发现 JIRA 记录了相同的问题KEYCLOAK 7237 https issues jboss org browse KEYCLOAK 7237 只是想检查一下是否有解决办法 有人
  • AngularJS:是否可以使控制器中的特定表单输入字段无效?

    我有一个地址文本输入字段 每当输入地址并单击输入字段旁边的搜索按钮时 我都会对地址进行地理编码 并将输入文本替换为地理编码器的结果 我还设置了一个范围变量 addressOk 是否可以根据以下内容使该特定表单输入字段无效 scope add
  • 将原始 JSON 加载到 Pig 中

    我有一个文件 其中每一行都是一个 JSON 对象 实际上 它是 stackoverflow 的转储 我想尽可能轻松地将其加载到 Apache Pig 中 但我无法弄清楚如何告诉 Pig 输入格式是什么 这是一个条目的示例 id oid 50
  • 为什么 C 提供的整数类型对于基本上任何项目来说都不够好?

    我更像是一名系统管理员而不是程序员 但我确实花费了大量的时间研究程序员的代码 试图找出问题所在 以及数量令人不安的that当程序员期望 u ll int32 t 或其他任何定义 是的 我知道这不是真的 但要么期望定义该类型的文件位于其他地方
  • 记录 CMake 脚本

    我发现自己处于一种情况 我想准确记录大量自定义 CMake 宏和函数 并且想知道如何做到这一点 首先想到的是简单地使用内置语法并且仅使用文档脚本 如下所示 FUNCTION NAME MACRO NAME description 这可以 但