CMake编译时生成源代码

2024-01-03

我在使用CMake时遇到以下情况:

  1. 它必须构建两个应用程序:

    a. 发电机

    b. 其他的东西

  2. The 发电机没什么花哨的,几个 CPP 文件链接在一起

  3. The 其他的东西 is:

    A。一些“正常”CPP 文件

    b.生成的 CPP/h 文件,我必须链接到这些文件。这些 CPP 文件是由发电机

The 发电机在configure阶段配置了一些选项,根据这些选项生成的文件内容不同。

在这里我收到一个错误:如果我指定了中的所有文件(生成的和未生成的)add_application of 其他的东西配置阶段被阻塞,因为它找不到生成的文件...显然是因为它们还没有生成,因为发电机尚未建成并执行。

所以问题是:使用 CMake 可以吗?如果是,怎么办?


对的,这是可能的。您可以通过提供自定义命令来生成文件来实现此目的,以便 CMake 学习如何生成它们。这是一个例子:

add_executable(generator gen1.cpp gen2.cpp)

add_custom_command(
  OUTPUT generated_file1.cpp generated_file2.cpp
  COMMAND generator -options --go here
  COMMENT "Running generator"
  VERBATIM
)

add_executable(something_else
  fixed1.cpp
  fixed2.cpp
  generated_file1.cpp
  generated_file2.cpp
)

这样,CMake 将知道文件已生成,并将引入适当的依赖项 - 键入make something_else在干净的构建目录中将构建generator,然后运行它,然后构建something_else.

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

CMake编译时生成源代码 的相关文章

随机推荐

  • MariaDB - 无法以 root 身份登录

    我正在尝试在 Ubuntu 16 04 02 上设置 MariaDB 10 0 29 在我安装它并启动该过程之后 sudo service mysql start 我无法登录root即使我最初将密码设置为空白 Ie mysql u root
  • android webview崩溃4.3

    自 4 3 版本以来 我在 Android 中的支付 webview 遇到了问题 我猜是由于 SSL 证书重定向造成的 但我无法更改它 我在三星或索尼 08 08 17 22 38 619 E AndroidRuntime 7568 FAT
  • 如何为 Org 模式内联源代码 src_lang{} 进行语法高亮?

    有没有一种方法可以语法突出显示 Org mode 内联源代码 该代码标记为src ruby Array new 组织模式是否有默认选项 或者还有其他方法可以做到这一点吗 更新 这个特定问题的正确答案如下https stackoverflow
  • 如何调试罕见的死锁?

    我正在尝试调试一个自定义线程池实现rarely僵局 所以我不能使用像 gdb 这样的调试器 因为在出 现死锁之前我已经点击了 100 次 启动 调试器 目前 我正在 shell 脚本中的无限循环中运行线程池测试 但这意味着我看不到变量等 我
  • 如何使用 AsyncHttpClient Android 上传多个文件

    我知道我可以从 AsyncHttpClient 上传单个文件 http loopj com android async http http loopj com android async http File myFile new File
  • 多容器docker(AW​​S)链接是单向的吗?

    我通过 AWS 上的多容器 docker 获得了非对称容器可发现性 也就是说 第一个容器可以找到第二个容器 但第二个容器找不到第一个容器 我在 AWS Elastic Beanstalk 上进行了多容器 Docker 部署 两个容器都使用相
  • 在返回“send_file”的烧瓶函数中,代码似乎不会在后续请求上运行,但文件仍然会下载。为什么?

    我正在使用具有以下路线的 Flask 代码 app route download def download file path certificate docx print certificate printed print os getc
  • 从 php stdin 保存大文件

    请告诉我从 php stdin 保存大文件的最佳方法 iOS 开发人员向我发送大型视频内容到服务器 我必须将其存储到文件中 我读取带有视频数据的标准输入线程并将其写入文件 例如 这样 handle fopen php input rb wh
  • JPlayer Circle Player 第一次使用 vox 制作的 wav 文件时不显示圆圈

    我有一个应用程序 它使用 JPlayer Circle Player 播放短音频以进行转录 这些音频均源自 vox 文件 已由 SoX 转换为 wav 按下 播放 按钮时 将播放音频 但不显示绿色圆圈 剪辑播放后 再次按播放确实会显示绿色圆
  • 为什么这个 std::vector 会给出运行时错误?

    vector
  • .NET:关于 AssemblyVersion,什么定义了二进制兼容性?

    对强命名程序集的哪些更改需要更改 AssemblyVersionAttribute 显然 以可能要求客户端必须更改代码的方式更改公共 api 需要增加 AssemblyVersion 但是 如果对公共 API 进行更改而不需要在客户端中更改
  • C 中的类型双关和联合

    我目前正在开发一个项目来构建一个小型编译器 只是为了它 我决定采用构建一个极其简单的虚拟机作为目标的方法 这样我就不必担心学习 elf intel 汇编等的细节 我的问题是关于 C 中使用联合的类型双关 我决定在虚拟机内存中仅支持 32 位
  • MongoDB嵌套对象聚合计数

    我有一个高度嵌套的 mongoDB 对象集 我想计算与给定条件匹配的子文档的数量编辑 在每个文档中 例如 id chr 20 pos 14371 ref A alt G studies study id Study1 samples sam
  • RuntimeError:DataLoader 工作线程意外退出

    我是 PyTorch 和机器学习的新手 所以我尝试按照这里的教程进行操作 https medium com nutanbhogendrasharma pytorch 卷积神经网络 with mnist dataset 4e8a4265e11
  • 使用 Emscripten 将 R 函数编译为 JavaScript

    我正在尝试使用 Emscripten 将一些用 C 编写的 R 函数编译为 JavaScript 我的第一个任务是移植一个名为pf 源码可以找到here https github com wch r source blob trunk sr
  • PHP:递归地将目录中的所有文件重命名为小写

    我需要帮助 我想递归地将目录中的所有文件重命名为小写 我有一个代码要测试 但它仅在该文件夹内重命名 而不是递归地重命名 我怎样才能让它递归地执行呢 这是我使用的代码 您可以使用 SPL递归目录迭代器 http docs php net ma
  • 不同组的 dplyr 滞后

    我正在尝试使用 dplyr 来改变包含变量的同一组滞后的列以及其他组 之一 的滞后 编辑 抱歉 在第一版中 我在最后一秒按日期重新排列 有点搞乱了顺序 这就是我想要的结果 Here is a minimal code example lib
  • Django - 复制具有 2 个嵌套外键的模型实例

    我是 django 新手 我有一个调查应用程序 其中管理员创建有问题的调查 问题有选择 我已将 save as True 添加到我的调查管理员中 但是当我复制调查时 问题是存在于副本中 但不存在选择 class SurveyAdmin ad
  • Pandas 列数学运算 无错误无答案

    我正在尝试对文件执行一些简单的数学运算 下面的列file 1 csv本质上是动态的 列的数量会不时增加 所以我们无法修复last column master ids csv 在任何预处理之前 Ids ref0 the columns inc
  • CMake编译时生成源代码

    我在使用CMake时遇到以下情况 它必须构建两个应用程序 a 发电机 b 其他的东西 The 发电机没什么花哨的 几个 CPP 文件链接在一起 The 其他的东西 is A 一些 正常 CPP 文件 b 生成的 CPP h 文件 我必须链接