如何使用cmake在源代码中生成标头?

2023-11-22

在我的项目中,我有一个“架构”文件和实用程序,用于生成头文件。 我正在使用 cmake 和源代码构建来构建应用程序。

目前我必须手动重新生成头文件,然后构建应用程序。

然后我想出了这个 CMakeLists.txt 语句,但它们在构建目录而不是源目录中生成标头。

configure_file( generator.pl generator COPYONLY )
configure_file( schema.txt.in schema.txt COPYONLY )
add_custom_command(
    OUTPUT generated.h
    COMMAND ./generator schema.txt generated.h
    DEPENDS mib_schema.txt.in generator.pl
    COMMENT "Regenerating header file..."
)

是否可以在源目录中生成标头?

编辑(以反映答案):

可以通过使用以下任一方法完全限定其路径来直接访问该文件

${CMAKE_CURRENT_SOURCE_DIR}

or:

${CMAKE_CURRENT_BINARY_DIR}

因此,要在我的源目录中生成标头,之前从 CMakeLists.txt 中摘录的内容将变为:

add_custom_command(
    OUTPUT generated.h
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h
    DEPENDS mib_schema.txt.in generator.pl
    COMMENT "Regenerating header file..."
)

这实际上更简单。 谢谢

--to


我认为生成的标头很好地放置在二进制目录中,因为您可能想要创建具有相同源和不同配置的构建目录,从而导致生成不同的标头。

您可能希望将构建目录包含到您的项目中:

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

如何使用cmake在源代码中生成标头? 的相关文章

  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • Cmake选项默认值

    如果我有一个 CMakeLists txt 文件 cmake minimum required VERSION 2 8 OPTION FOO Foo Option OFF MESSAGE FOO FOO 然后我调用 cmake 得到以下输出
  • 如何使用自定义 CMake 版本执行 Visual studio 2019 Ninja 构建?

    我正在尝试从 IDE 在 Visual Studio 2019 上使用 Ninja 构建一个项目 我想使用与 VS 2019 发行版中集成的版本不同的 CMake 版本 我已经设置了cmakeExecutable我的变量CMakeSetti
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • VS 2010 和 CMake:“rc”未被识别为内部或外部命令

    我正在尝试使用 VS 2010 和 CMake 在 Windows 10 Home 上构建一个项目 我收到以下错误 zutil c lib nologo out zlib lib adler32 obj compress obj crc32
  • 如何在cmake中将构建类型更改为Release模式?

    我正在尝试以发布模式构建一个项目 默认情况下它是在调试模式下构建的 我正在设置变量CMAKE BUILD TYPE到 释放 CMakeLists txt 但它仍在调试模式下构建项目 当我在 CMake 命令中传递 Release 作为构建类
  • 如何配置 cmake 在修改非 .cpp 源文件时重新编译目标

    如果我们看下面的最小示例 cmake minimum required VERSION 3 20 project example add executable PROJECT NAME main cpp test txt 一旦可执行目标被构
  • CMake AUTOMOC,文件位于不同文件夹中

    我有一个简单的 CMake 项目 proj project folder a h a cpp CMakeLists txt CMakeLists txt cmake minimum required VERSION 3 2 set CMAK
  • 为什么我收到“找不到 com.android.tools.build:gradle”错误?

    这是基于我最后的question https stackoverflow com questions 30958596 how to resolve low sdk build tools error以及 按照此tutorial https
  • 当目标位于子目录中时,替代 CMake POST_BUILD 命令

    通常需要确保 CMake 构建项目在编译后最终位于某个位置 并且add custom command POST BUILD 命令是实现以下目标的常见设计模式 add custom command TARGET mytarget POST B
  • 如何使用 shell 命令的结果初始化 CMake 变量

    有没有办法将 CMake 脚本中的变量设置为 shell 命令的输出 就像是SET FOO COMMAND echo bar 会想到 你想要的execute process https cmake org cmake help latest
  • CMAKE找不到OpenNI

    我一直在尝试使用 Kinect 库运行 入门教程 http nicolas burrus name index php Research KinectUseNestk 但我偶然发现了一个错误 当我在 CLI 中尝试以下行时 cmake DC
  • 你能从另一个文件中包含一个通用的 cmake 最小值吗?

    我对 cmake 很陌生 有 makefile 背景 我喜欢用类似的东西include cmake utils header cmake 包含 cmake 文件的常见片段 以便我可以将它们包含在我的项目中 但只能在一处更改一次 在哪里cma
  • 如何获取 CMake 单元测试的相对路径?

    我有一个使用 CMake 构建的项目 它使用 Catch2 进行单元测试 一些单元测试练习从文件加载数据的代码 如下所示 std string resource dir TEST CWD resources std ifstream inf
  • Windows 上的 CMake 链接共享库

    共有三个文件 m c m h和 main c File m h m h int m File m c m c include
  • E0145 成员可能未初始化 - cmake - VS2017

    我正在尝试将 C 应用程序与 PCL 库链接 我使用 VCPKG 安装了 PCL 及其所有依赖项 我正在使用 Visual Studio 2017 和 cmake 3 12 for X64 当我尝试构建解决方案时 它给了我以下错误 E014
  • 为 CMake 项目创建配置文件

    我正在尝试为我拥有的示例项目生成配置 CMake 文件 我的示例由两个 CMake 项目组成 一个在内部使用 spdlog 并在其界面中使用 eigen 的库 以及一个使用该库的应用程序 我们的想法是学习如何创建 Config cmake
  • CMake编译java代码

    是否可以使用CMake来编译并运行java代码 从命令行我在终端上编写的命令是 javac classpath theClasspath mainClass java java classpath theClasspath mainClas
  • Sublime Text 2:构建系统自定义选择器

    如何使用自定义扩展在构建系统中定义选择器 例如 ltx cmake等 没有可用的选择器 例如text tex latex source c etc 是否可以 如果是的话 怎么办 如果您定义新的语法定义 即新的 tmLanguage 文件 这
  • Pythonlibs3 CMake 和 macOS

    更新2 将以下两行添加到我的 CMake 文件中时 成功找到了 python 3 及其库 这只在终端中工作的原因是因为 CLion 使用其捆绑版本的 CMake 3 6 3 而我的终端使用的更新版本 3 7 2 正确找到了 python F

随机推荐

  • Android Market - 上传 APK 文件时出错

    刚才我已经开发了一个应用程序 现在我准备将其上传到Android市场 但是当我尝试上传时 它显示以下错误消息 市场不接受使用调试证书签名的 apk 创建有效期至少 50 年的新证书 Market 要求用于签署 apk 的证书至少在 2033
  • 序列化 .net 对象并省略文档类型?

    我编写了一些 net 代码来使用 XMLSerializer 类序列化对象 public static string serialize object o Type type o GetType System Xml Serializati
  • Jquery - 不可滚动 div 上的滚动事件

    example http jsbin com ofiy 2 edit preview 我尝试用不可滚动的div 绿色的 滚动一个div 红色的 我的问题是 当我在绿色 div 上滚动时 jqueryscroll 不着火 HTML div s
  • 当 rpm 文件中存在用于 rpm 安装的“缺少”lib 时

    我正在为 centos 生成一个 rpm 文件 但是当我尝试在干净的机器上安装它时 它失败了 gt Running transaction check gt Package grass x86 64 0 6 4 4 1 el6 will b
  • Facebook 登录无法在 Safari/ iPhone 中打开

    我正在创建一个显示 Facebook 好友的应用程序 首先 用户需要单击登录按钮 然后在填写登录 ID 和密码后会出现一个简单的弹出屏幕 其中将显示好友列表 一切正常 可以在 Firefox Chrome IE 上运行 但不会在 Safar
  • Apache POI - 使用 XSSFWorkbok + servlet 响应

    我的 java 应用程序在启用下载 XLSX 文件时遇到问题 按照此链接中显示的示例 使用 Apache POI 创建 excel 文件供用户下载 我尝试了两种配置来下载 保存电子表格 首先使用 XLS 文件 response setCon
  • Java/JavaScript 日期:这是真的吗?

    假设用户在与应用程序服务器不同的时区通过浏览器运行我的 Web 应用程序 我使用 JavaScript 在客户端序列化日期date getTime 方法 我通过 Json 发送结果毫秒 然后通过调用在服务器端创建一个 Java Date 对
  • UITextField - 仅允许数字和标点输入/键盘

    我已经尝试过下面的代码 但只允许输入键盘上的数字 我的应用程序要求键盘使用句号 句号 用于金钱交易 我尝试的代码是 BOOL textField UITextField textField shouldChangeCharactersInR
  • Spark 作业因 java.io.NotSerializedException: org.apache.spark.SparkContext 失败

    当我尝试应用方法 ComputeDwt 时 我遇到了上述异常RDD Int ArrayBuffer Int Double 输入 我什至正在使用extends Serialization在 Spark 中序列化对象的选项 这是代码片段 inp
  • 将 MvxCommand 与 CommandParameter 绑定结合使用

    我正在尝试用火MvxCommand 与 CommandParameter 但面临以下问题 MyView axml 包含
  • 如何在 XCode 中使用 ARM 汇编器?

    出于教育目的 我想向现有的 iPhone 应用程序添加一个用 ARM 汇编语言编写的函数 一般来说 我不需要 ARM 汇编教程 因为我已经读了太多了 我只是不知道如何实际运行代码 我想做的是这样的 无用 h void useless 无用
  • 无法将图像渲染到 HttpContext.Response.OutputStream

    基本上我试图在 ASP NET 处理程序中渲染一个简单的图像 public void ProcessRequest HttpContext context Bitmap image new Bitmap 16 16 Graphics gra
  • Android:根据给定的 id 获取列表视图中项目的位置:

    getItemIdAtPosition 是android中的一个函数 用于获取列表视图中给定项目的位置的id 有什么方法可以做相反的事情 即获取项目的位置是给定其 id 的列表视图吗 不可以 你必须手动完成 在您正在使用的适配器中创建一个公
  • 使用 linq 按范围分组[重复]

    这个问题在这里已经有答案了 我们如何使用等于或大于的分组范围 var data new new Id 0 Price 2 new Id 1 Price 10 new Id 2 Price 30 new Id 3 Price 50 new I
  • 错误:“您在短时间内创建或删除了太多日历或日历事件。”

    第一次在这里提问 我构建了一个 Google 应用程序脚本 它从 Google 表格获取事件信息 并基于以下内容在 Google 日历上创建事件 Mogsdad 的回答在这里 由于我不存在的声誉 我无法在该线程上发布问题 exportEve
  • 使用vue js和axios上传多个文件

    我正在尝试使用 vuejs 和 axios 上传多个图像 但在服务器端我得到空对象 我在标头中添加了 multipart form data 但仍然是空对象 submitFiles Initialize the form data let
  • 将整数转换为日期

    我在将整数日期 20180525 转换为 YYYY MM DD 格式的日期时遇到问题 有没有办法做到这一点 或者我应该将其转换为代码 在本例中为Java 任何对此的帮助将不胜感激 谢谢你 如果您的日期以 YYYYMMDD 形式存储为整数 则
  • MySQL数据库中指定的两个主键

    我正在尝试创建一个测试数据库 它是预先存在的数据库的副本 我正在使用 Django 模型 理论上是与原始数据库一起使用的模型 来执行此操作 我最近从其他人那里继承了代码 并试图弄清楚代码到底发生了什么 在该模型中 其中一个表有两列标识为主键
  • C中按空格分割字符串

    我正在使用 C 语言 通过套接字我将收到一条消息 其中包含一个空格 我需要将字符串拆分为空格处的部分 我该怎么做呢 strtok r是你的朋友 不要使用普通的strtok 因为它不是线程安全的 即使在线程安全的平台上 因为状态保存在线程本地
  • 如何使用cmake在源代码中生成标头?

    在我的项目中 我有一个 架构 文件和实用程序 用于生成头文件 我正在使用 cmake 和源代码构建来构建应用程序 目前我必须手动重新生成头文件 然后构建应用程序 然后我想出了这个 CMakeLists txt 语句 但它们在构建目录而不是源