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 脚本的命名约定是什么? 的相关文章

  • 将 Doctest 与代码一起使用时将实现放在哪里

    我在用着doctest https github com onqtam doctest用于我的 C 项目中的测试 我想将测试代码与我的实现放在一起 正如库所说是可能的 但我似乎不知道如何处理 doctest 实现代码 我有一个doctest
  • 使用星号更改多个源文件的 CMake 编译器标志

    我正在尝试调试与编译器优化相关的问题 O2 或以下版本没有问题 O3 出现段错误 并且我希望能够切换我的源代码块的编译器标志 以便我可以尝试缩小段错误的来源范围 我可以将全局优化级别设置为 O2 并更改单个文件的属性 如下所示 SET SO
  • 如何命名泛型类的 C# 源文件

    我试图坚持通用命名约定 例如中描述的那些开发类库的设计指南 http msdn microsoft com en us library ms229042 aspx 我将每种类型放入其自己的源文件中 并且部分类将拆分为多个文件 如问题中所述部
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • Windows 内核中可能的最大文件名长度

    我想知道 什么是longestWindows 内核允许的可能名称长度 例如 我知道内核使用UNICODE STRING结构来保存所有对象路径 并且由于宽字符字符串的字节长度存储在USHORT 允许最大路径长度为 2 15 1 个字符 有没有
  • 通过文件名通配符打开文件

    我有一个文本文件目录 所有文件的扩展名都是 txt 我的目标是打印文本文件的内容 我希望能够使用通配符 txt指定我希望打开的文件名 我正在思考类似的事情F text txt 分割文本文件的行 然后打印输出 这是我想做的一个例子 但我希望能
  • 如何指定CMAKE外部项目的编译器?

    我使用ExternalProject Add 包含一个外部项目 我想要的是能够做到 cmake DCMAKE CXX COMPILER
  • 如何在cmake中将构建类型更改为Release模式?

    我正在尝试以发布模式构建一个项目 默认情况下它是在调试模式下构建的 我正在设置变量CMAKE BUILD TYPE到 释放 CMakeLists txt 但它仍在调试模式下构建项目 当我在 CMake 命令中传递 Release 作为构建类
  • CMake:如何更改单个目标的编译器

    我有使用交叉编译器的嵌入式项目 我想介绍一下Google测试 用原生GCC编译器编译 另外使用 CTC 编译器构建一些单元测试目标 Briefly 我有 3 个不同的目标并用 3 个不同的编译器编译它们 如何表达它CMakeLists tx
  • CMake 错误:“add_subdirectory 未给出二进制目录”

    我正在尝试将 Google Test 集成到更大项目的子项目中 但找不到令我满意的解决方案 我有两个限制 Google Test 的源代码已经位于项目结构中的某个位置 因此不能使用 URL 从 git 存储库下载它 Google Test
  • 如何将任何语言和字符集的字符串转换为 Java 中的有效文件名?

    我需要根据用户输入的名称生成文件名 这些名称可以是任何语言 例如 约翰 史密斯 高岡和子 我爱你 这些是使用输入的值 因此我不能保证名称不包含文件名中无效的字符 用户将从浏览器下载这些文件 因此我需要确保文件名在所有配置的所有操作系统上都有
  • ES6 中 const 对象键的命名约定

    es6 中 const 对象内的键名是否有推荐的命名约定 我无法找到说明它们应该是大写还是小写的资源 const COLOR CODES BLUE 1 RED 1 vs const COLOR CODES blue 1 red 1 例子 h
  • 是否可以让 cmake 构建文件(CMakeLists.txt)不在 CLion 的根目录中

    是否可以让 cmake 构建文件 CMakeLists txt 不在 CLion 的根目录中 我目前正在开发的项目中 cmake 构建文件不在 CLion 项目的根目录中 在 out Debug 目录中 我希望 CLion 打开该项目的根目
  • 奇怪的函数参数名称行为

    我问了一个关于cmake和传递变量的问题here https stackoverflow com questions 14375519 cmake how to write a nice function that passes varia
  • CMake GUI:指定 Windows 的库路径

    我正在编译一个基于 CMake 的项目 具体来说是 SOCI 它依赖于 SQLite 这是Windows 没有可供项目研究的标准路径 因此它找不到SQLite 我在配置时得到这个 SQLite3 not found some librari
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译
  • 如何配置 cmake 在修改非 .cpp 源文件时重新编译目标

    如果我们看下面的最小示例 cmake minimum required VERSION 3 20 project example add executable PROJECT NAME main cpp test txt 一旦可执行目标被构
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的

随机推荐

  • 在 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