CMake 脚本的命名约定是什么?

2023-12-25

我知道 CMake 使用标准名称“CMakeLists.txt”和add_subdirectory用于在构建过程中直接调用脚本的函数。

我有一些 CMake 代码,用于将文件转换为 C++ 字符串,然后可以使用这些代码将其烘焙到程序中#include指令。我的根 CMakeLists 文件中的相关代码如下所示(当然,大大简化了):

add_custom_command(
  OUTPUT ${CMAKE_BINARY_DIR}/path/to/example.json.txt
  COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${STRING_PATH} -P BuildString.cmake
  DEPENDS ${CMAKE_SOURCE_DIR}/path/to/example.json
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_custom_target(strings DEPENDS ${CMAKE_BINARY_DIR}/path/to/example.json.txt)

(在实际代码中,我调用add_custom_command对于每个文件,我需要将其转换为字符串,然后将所有输出文件名作为列表传递给add_custom_target.)

这是 BuildString.cmake:

set(DELIMITER "")

set(SOURCE ${CMAKE_ARGV1})
set(BUILD ${CMAKE_ARGV2})
set(PATH ${CMAKE_ARGV3})

file(READ ${SOURCE}/${PATH} STRING)
# add semicolons back into string
string(REGEX REPLACE ";" "\\\\;" STRING "${STRING}")
file(WRITE ${BUILD}/${PATH}.txt R\"${DELIMITER}\(${STRING}\)${DELIMITER}\")

正如您所看到的,BuildString.cmake 仅接受一个输入文件并输出该文件的内容(使用 C++ 原始字符串文字表示法包装)${DELIMITER}作为分隔符)进入构建目录。

我应该怎么称呼 BuildString.cmake?约定是使用所有小写字母和下划线(build_string.cmake),还是小驼峰式(buildString.cmake)?或者名称应该是名词而不是动词(StringBuilder.cmake)?

(顺便说一句,如果您能看到我可以改进任何代码的不相关方法,那也将不胜感激。)


CMake 模块有一个约定:snake-casefunction_or_macro()是用驼峰命名法实现的FunctionOrMacro.cmake文件。因此,如有疑问,请使用驼峰命名法。

并且使用动词,名词用于类别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 脚本的命名约定是什么? 的相关文章

  • clang-tidy - 忽略第三方标头代码

    我正在为我的项目使用 CMake 并且我想向项目引入 clang tidy 检查 我用于此目的CMAKE CXX CLANG TIDY and clang tidy用于检查设置的文件 我想在 CI 中使用警告作为错误来可靠地检查提交是否引入
  • C#代表,参考解析时间

    我有一个关于 net 代表的简单问题 假设我有这样的事情 public void Invoke Action
  • cmake MSYS Makefiles 生成器丢失

    我通过 pacman 安装了 cmake 3 2 3 当我尝试从 msys64 shell 中使用它时出现错误 cmake G MSYS Makefiles CMake Error Could not create named genera
  • 构建错误:depfile 有多个输出路径 ninja:构建停止:子命令失败

    我在使用需要 CMake 支持的 JNI 代码构建 Java 项目时遇到此错误 该项目使用Android Studio构建 并得到NDK CMake和LLVM的支持 这些是 CMake 使用的以下标志 我实际上使用了作为 C 项目创建的项目
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再
  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • 有没有办法在 CMake 配置中禁止“实验性”C++17?

    我在 CMakeLists txt 中设置了以下内容 set CMAKE CXX STANDARD 17 set CMAKE CXX STANDARD REQUIRED ON set CMAKE CXX EXTENSIONS OFF 然而
  • 长多字节 NOP:通常理解的宏或其他符号

    x86 和 x86 64 处理器不仅具有单字节 这不是什么大秘密NOP指令 还包括各种类型的多字节类 NOP 指令 这些是我设法找到的 AMD 推荐 参考 AMD 系列 15h 处理器的 AMD 软件优化指南 文档 47414 http s
  • 如何从 CMake 构建目标仅生成目标文件 (*.o)?

    我正在尝试使用 CMake 构建一个对象文件 但我似乎无法让 CMake 构建除完整可执行文件之外的其他内容 我基本上是在寻找以下编译的结果 结果将加载到 VxWorks 目标上并然后链接 CC CFLAGS INC DIRS c src
  • 您在 Java 项目中使用什么策略进行包命名?为什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我不久前就想过这个问题 最近当我的商店正在开发第一个真正的 Java Web 应用程序时 这个问题又重新出现了 作为介绍 我看到两个主要的包命名
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 具有许多第三方依赖项的大型跨平台 C++ 项目在磁盘上的物理布局

    我正在重新组织物理 磁盘上 布局大型跨平台 C 项目 https github com jupiter jazz appleseed具有许多第三方依赖项 使用 CMake 构建 由于我们需要支持 Windows 这个平台上没有完善的包管理器
  • 如果 CMAKE_RUNTIME_OUTPUT_DIRECTORY 更改,CMake 无法找到测试

    我正在使用 CMake 构建我的项目 并且尝试为每个模块创建一堆测试套件 显然如果我修改变量CMAKE RUNTIME OUTPUT DIRECTORY那么 ctest 找不到要运行的测试并失败 我做了一个最小的例子来展示我正在谈论的内容
  • CLion - 命令行程序参数

    当我分配给 运行 调试配置 程序参数 之类的 aaa bbb 然后打印它时 任何人都可以告诉我 JetBrains CLion 有什么问题吗 printf s n argv 1 我刚刚得到 aaa 而它必须是 aaa bbb 因为它们用双引
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • ServiceStack操作命名约定可以被覆盖吗?

    我需要为 ServiceStack 服务定义一个 DTO 类 服务堆栈使用基于类名的约定 因此如果我的类称为 Transmission 则相应的服务将使用 HTTP 操作中使用的类型为 Transmission 的公开元数据 但我已经有了
  • 通过ExternalProject_Add 使用 pybind11 进行 CMake 项目的智能方法

    我正在使用编写一个 python 模块pybind11 with CMake3 9 4 因为方便所以想下载pybind11源文件使用ExternalProject Add in my CMakeLists txt 当我跑步时cmake 它不
  • 安装 EXPORT 需要子项目中的目标

    我正在尝试编写一个 cmake 脚本来安装我正在处理的项目 其中一部分是必要的install EXPORT LIB EXPORTS where LIB EXPORTS是我在各种项目中一直使用的 EXPORT 属性install TARGET
  • 返回 RxJava 的 Completable 的方法的命名约定

    我有一个带有视图类的 Android 应用程序 Fragment Activity 观察其ViewModel The ViewModel公开方法 例如getUserName返回Observable

随机推荐

  • 在 Angular 8 中使用 cli 命令添加 Web Worker 后出现错误

    Angular 8 为网络工作者添加了更好的支持 我没有运气让它发挥作用 有人知道我做错了什么吗 这是官方指南 https angular io guide web worker我跟着 使用此 cli 命令我生成了 Web Worker n
  • 在 scipy 中创建稀疏矩阵时,覆盖而不是添加重复的三元组

    在 scipy 中 要从三重格式数据 行 列和数据数组 创建稀疏矩阵 默认行为是对所有重复项的数据值求和 我可以更改此行为以覆盖 或不执行任何操作 吗 例如 import scipy sparse as sparse rows 0 0 co
  • React-native expo FileSystem.downloadAsync 损坏的图像

    我们有 RN 应用程序和服务器来存储图像 尝试根据用户从服务器下载一堆图像 并将它们显示在 RN 应用程序中 有时图像会被损坏 或者根本不显示 所以我必须重新加载应用程序才能使其工作 这甚至在很多时候都不起作用 或者清除存储并一次又一次下载
  • Jquery 和 JSF 找到 的特定 id [重复]

    这个问题在这里已经有答案了 我正在寻找匹配id for 输入文本在 JSF 中使用 Jquery 但它不起作用 我不知道为什么 JSF CODE
  • 无法更改 RVM 默认值

    我在更改默认 ruby 时遇到问题 运行 OS X Lion macbook work rvm list rvm rubies ruby 1 9 2 p290 x86 64 ruby 1 9 2 p318 x86 64 如您所见 1 9 2
  • 如何在单行上打印DataFrame

    With import pandas as pd df pd read csv pima data csv print df head 2 打印内容会自动格式化为多行 num preg glucose conc diastolic bp t
  • 是否可以知道用户是否正在文本字段中输入或删除字符?

    我正在使用文本字段委托方法 shouldChangeCharactersInRange 我想知道是否有任何方法可以判断用户是否正在删除字符或键入字符 有人知道吗 谢谢 BOOL textField UITextField textField
  • 如何在 macOS Mojave 上设置环境变量?

    我正在 macOS Mojave 上安装 THERMUS ROOT 热模型包 步骤之一 解压缩后 如下 设置环境变量 THERMUS 以指向包含 THERMUS 代码的顶级目录 我真的不知道该怎么办 我在 stackoverflow 上看过
  • 为什么 Javascript 中的 charCodeAt 的行为似乎与 PHP 的 chr 不同?我正在尝试实现base64

    我在 php 代码中使用了按位运算符 它返回 base64 中的解码字符串 我想实现与 javascript 相同的 php 代码 据我所知chr https www php net manual en function chr php相当
  • 单击后退按钮强制刷新页面

    我有 2 个 asp net 页面 页面 A 和页面 B 单击页面 A 上的链接时 用户将被重定向到页面 B 在页面 B 上时 如果用户单击浏览器的后退按钮 我需要强制调用页面 A 的页面刷新 我如何实现这个功能 注意 代码需要兼容不同浏览
  • 如何检查麦克风是否已插入 iPhone?

    我在 AVFoundation 框架中使用 AVAudioRecorder 我想知道如何检查麦克风设备是否已插入 在 iPod Touch 上 BOOL inputAvailable AVAudioSession sharedInstanc
  • 将 WCF 请求记录到数据库

    我想将 WCF 服务项目中的每个请求 xml 消息记录到数据库中 请建议我哪种方法是最好的和首选的方法 1 使用idispatchmessageinspector接口 http msdn microsoft com en us librar
  • DC.js 数据表的自定义文本过滤器

    我正在构建一个仪表板来显示一些数据 我有几个图表和一个列出所有数据的表格 我正在尝试添加搜索功能来过滤图表 我有很多公司以及每个公司的一些数据 因此 如果我搜索 Appl 则数据表中只会列出以 Appl 开头的公司 并且图表将反映这一点 当
  • 如何通过另一个 data.frame 中的某些列合并行名?

    我想知道是否有更好的方法将两个 data frames 放入一个中 将 rowname 视为一列 然后按此列与其他一些 data frame 合并 我知道我可以执行以下操作 df1 rn lt row df1 all lt merge df
  • 比较两个 pandas 数据框

    我有两个 pandas 数据框定义如下 data orig 1 Bob 3 0 2 Sam 2 0 3 Jane 4 0 columns ID Name GPA data new 1 Bob 3 2 3 Jane 3 9 4 John 1
  • 如何在意外挂断后恢复 git pull/clone?

    我对某个存储库 主要是 github 的 执行 git pull clone 有时几分钟后下载就会崩溃 这是一个日志 remote Counting objects 2284 done remote Compressing objects
  • 是否有最好的信用卡加密 .NET 算法?

    互联网System Security Cryptography命名空间有一个相当令人困惑的算法集合 我可以使用它们来加密信用卡详细信息 哪个是最好的 对于相对较短的字符串来说 它显然需要安全 编辑 我在英国 据我所知 只要不存储三位数的 C
  • 如何存储/加载大型 C++ 容器

    我想知道如何存储 C 容器以实现高效加载 例如如何存储非常大的整数向量 我知道我可以将它们保存在文件中 并从该数据中创建新的向量 include
  • IIS7,web.config 仅允许静态文件处理程序位于网站的 /uploads 目录中

    如果我认为可能的话 如何修改我的 web config 以使子目录静态 里面的文件将仅作为静态文件处理 即使其名称是 aspx 或其他名称 谢谢 将以下内容添加到web config文件位于包含您希望仅作为静态内容提供的文件的文件夹中
  • CMake 脚本的命名约定是什么?

    我知道 CMake 使用标准名称 CMakeLists txt 和add subdirectory用于在构建过程中直接调用脚本的函数 我有一些 CMake 代码 用于将文件转换为 C 字符串 然后可以使用这些代码将其烘焙到程序中 inclu