cmake 在执行其他操作之前执行进程

2024-04-27

我在执行其他操作之前 CMake 执行进程时遇到问题。

下面的代码片段显示了这种情况:

if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/generated")
  file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated")
  execute_process(
    # This tool generates library sources, which are not known before
    COMMAND "source_file_generator_command"
    # This tool iterates over the generated source tree and creates
    # a proper CMakeLists.txt in the 'generated' directory from the
    # source files found there
    COMMAND "cmake_lists_generator_command"
    WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated"
  )
endif()

# At this point the generated subdirectory (with the also
# generated CMakeLists.txt file) shall be included
add_subdirectory(
  "${CMAKE_CURRENT_BINARY_DIR}/generated"
  "${CMAKE_CURRENT_BINARY_DIR}/generated_build"
)
# But the 'add_subdirectory' statement fails due to non-existing
# CMakeLists.txt in the 'generated' source directory at this point

如上所述,问题在于,应添加的子目录中的 CMakeLists.txt 文件是在第一次 CMake 运行期间由特殊脚本动态生成的(生成的源之前未知)。从字面上看,我需要 CMake 等待 if/else 块中的所有语句都执行完毕,并处理 add_subdirectory 语句,而不是等到一切完成(生成 CMakeLists.txt)。对于这样的用例有适当的解决方案吗?

感谢您的帮助,

Felix


当几个COMMANDs for execute_process被使用,它们被执行in pipe。来自描述 https://cmake.org/cmake/help/v3.0/command/execute_process.html此 CMake 命令的:

使用每个进程的标准输出运行给定的一个或多个命令序列piped到下一个的标准输入。

如果你想要真实顺序的执行命令时,您需要使用一通电话execute_process每个命令:

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

cmake 在执行其他操作之前执行进程 的相关文章

  • 构建 LLVM 失败并显示空错误消息

    我正在尝试构建 LLVM 3 1 和 Clang 3 1 我遵循了入门指南铿锵的网站 http clang llvm org get started html 检查必要位置的存储库 获取 Python 等 如果我安装了 Python 3 3
  • 找不到 boost_process cmake find_package

    我正在尝试将 boost 库导入到我的 C 项目中 由于某种原因 它找不到 Boost Process 尽管它找到了其他库 我的 CMakeLists txt 文件 cmake minimum required VERSION 3 9 FA
  • 在 ninja/cmake 中操纵独立目标的构建顺序

    我正在开发一个使用 cmake ninja 构建的 C 项目 在 64 线程计算机上有大约 1200 个构建目标 有一个翻译单元需要 10 分钟来编译 大多数其他单元都相对较快 因此所有其他目标的构建一起只需要大约 9 分钟 在所有线程上构
  • 使用 CMake 在主项目之前强制构建外部项目(使用 buildtools)

    我想在开始构建我的主项目之前构建 gsl 我将以下行添加到 rootCMakeLists txt file cmake minimum required VERSION 2 8 project moose include CheckIncl
  • CMake子目录依赖

    我对 CMake 很陌生 事实上 我正在通过 Kdevelop4 widh C 进行尝试 我习惯为我创建的每个命名空间创建子目录 即使所有源代码都必须编译并链接到单个可执行文件中 好吧 当我在 kdevelop 下创建一个目录时 它会使用
  • cmake中如何连接字符串

    有没有办法在cmake中连接字符串 我有一个仅包含具有主要方法的 cpp 文件的文件夹 我认为只需在所有 src 文件中使用 foreach 就很容易了 这就是我到目前为止所得到的 project opengl tutorial cmake
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • Windows 中 CMake 的默认生成器是什么?

    在一台 PC 上运行 CMake 时 CMake 默认生成 NMake 文件 另一方面 它生成一个 Visual Studio 项目 我知道我可以通过添加来覆盖默认值 G NMake Makefiles 到我的 CMake 语句的末尾 但我
  • VS 2015 命令提示符中不再找到 rc.exe

    我刚刚安装了 Windows 10 创意者更新 版本 10 0 15063 我安装了多个版本的 Visual Studio 2012 2013 2015 和 2017 我几周前才安装了 VS 2017 Problem CMake 版本 3
  • 使用 cmake 构建项目后如何运行 ctest

    我希望每次成功构建项目时都启动测试 如果某些测试被破坏 我希望我的构建也被破坏 默认情况下 我需要通过运行来手动运行测试ctest命令 CTest 实际上可以构建项目 但我使用调用的 IDEmake建立资源 和make不运行测试 我将此命令
  • CMake:如何在多个文件上运行自定义命令来生成源文件?

    我有以下情况 我想编译一些Scheme文件Gambit https github com gambit gambit成可执行文件 为此 我使用 gambit 将所有计划文件翻译 生成为 C 和目标文件 然后将其编译并链接为可执行文件 假设我
  • 使用 cmake 和 Visual Studio 的一个解决方案中的多个项目

    我有一个 Visual Studio 2010 解决方案 其中包含 5 个项目 两个库和三个应用程序 依赖于库 我现在想将构建系统迁移到 CMake 也能够在 Linux 下编译 我已经了解了如何为一个项目编写 CMakeLists txt
  • CMake 64 位和 SFML 64 位

    我正在尝试使用适用于 Windows 的 CMake 64 位和 SFML 2 5 1 64 位构建 C 项目 当我在项目上运行 cmake 时 我收到一条错误消息 我能让它工作的唯一方法是改变CMAKE PREFIX PATH指向 SFM
  • 如何重新安装最新的cmake版本?

    我想在Linux环境下安装cmake的最新版本 我安装了 cmake 3 5 版 但某些应用程序不支持 我尝试通过卸载当前版本来升级它 但是当我使用 sudo apt get install cmake 重新安装时 我重新安装了相同的版本
  • CMake 占位符如何工作?

    在 CMake 的支持库中 您将看到如下所示的命令定义 set CMAKE ASM ASM DIALECT COMPILE OBJECT
  • cmake 和视觉工作室

    海湾合作委员会 4 4 2 Visual Studio C 2008 我一直在linux上使用cmake 没有任何问题 现在我已经通过应用程序移植到 Windows 上运行 我使用 cmake G Visual Studio 9 2008
  • CXX 编译器标识未知

    我们在使用 Visual Studio 2012 在 Windows 7 64 位下使用 CMake v2 8 12 编译项目时遇到问题 CMake 给我们提供了以下错误 我们已经尝试使用管理员权限从 Visual Studio 命令行启动
  • Cmake 链接到共享库找不到​​库

    在 Ubuntu 上 我有两个目录 build and src In src my CMakeLists txt文件有以下几行 add executable Test main cpp target link libraries Test
  • cmake 找不到 boost 库,因为它查找错误的文件名

    我根据文档在 Windows 8 1 机器上构建了 boost 1 56 库 作为共享库和静态库 他们全部出现在BOOST ROOT stage lib目录 文件名格式如下 boost thread vc120 mt 1 56 dll bo
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM

随机推荐

  • DLLImport C++ 函数,以 char* 作为输入或输出参数

    我有两个想要 DllImport 的 C 函数 bool SendString const char pSendStr long strSize bool ReadString char pReadStr long readStrSize
  • JQuery .submit() 在 IE9 中失败

    下面是一个 Jsfiddle 和最近提出的问题的链接 如果您在 FF 或 Chrome 中进入 jsfiddle 页面并单击 Click Me 您可以选择一个文件 一旦确定该文件 页面将查找 php 脚本 在 IE 中 它不会查找 php
  • TOAuth2Authenticator:如何刷新过期的令牌?

    我一定是错过了什么 我一直在尝试使用新的 对我来说是新的 来自delphi xe2环境 TOAuth2Authenticator TRESTClient TRESTRequest TRESTResponse组件来刷新过期的OAUTH2令牌
  • junit-vintage-engine 和 junit-jupiter-engine 之间的区别?

    这是一个双重问题 有什么区别junit vintage engine and junit jupiter engine Spring Boot 入门项目排除了junit vintage engine 是强制使用junit jupiter e
  • SpringBoot - 无法解析@RunWith - 找不到符号

    Spring Boot 项目 在 build gradle 中 dependencies implementation com google code gson gson 2 7 implementation com h2database
  • gulp-sass 可以解决 load_path 支持吗?

    问题 我正在使用 gulp sass 并想定义一个 load path 这样我就不必有很长的 import 规则 voor Bower 依赖项 例如 import normalize 代替 import bower components b
  • .net/C# 的 Html 解析器和对象模型

    我希望使用 net 来解析 html 以测试或断言其内容 IE HtmlDocument doc GetDocument 一些 html 列表表单 doc Forms 链接 link doc GetLinkByText 新客户 这个想法是允
  • 如何将一个目录中的所有文件移动到多个具有给定文件数量的目录中?

    我有一个包含超过 27000 张图像的目录 我想将这些文件分成文件夹 每个文件夹包含大约 500 张图像 它们如何排序并不重要 我只是想将它们分开 一个 简单 的 find xargs 就可以了 find maxdepth 1 type f
  • 关于 GK 成就的完成百分比

    经过测试 我发现GKAchievement的percentComplete类型虽然是double 但在苹果的帮助文档中合法值是在0 0到100 0之间 但是如果你向苹果服务器报告percentComplete 1 5 下次你将得到值perc
  • Visual Studio 编辑器边距中的蓝线

    使用 Visual Studio 时 我在页边空白处看到这些蓝线 我知道黄线和绿线表示编辑 但在蓝线上找不到任何内容 有谁知道他们的意思吗 Visual Studio 使用三种颜色来跟踪变化 yellow 保存前进行更改 green 保存后
  • Windows 7 SDK安装失败

    我好像完全无法安装Windows 7 SDK http en wikipedia org wiki Microsoft Windows SDK到我的机器上 我在网上找到的唯一解决方案是进行一系列注册表更改 我已经这样做了 仍然没有成功 这是
  • 部分类继承

    我正在为 Windows Phone 制作一个单位转换器 但我在类继承方面遇到了一些问题 我有课Measurement这应该是我的程序中图形内容的顶级 public class Measurement PhoneApplicationPag
  • matplotlib:Humor Sans 无法正确显示重音

    如果我选择 Humor Sans 这就是我从 matplotlib 得到的结果 因此 DIST NCIA 显示为 DIST NCIA 与其他字体一起显示效果很好 代码在这里 coding utf 8 from matplotlib impo
  • 序列化 - 如何保护序列化的 JAVA 对象?

    如果通过网络发送序列化对象 如何保护序列化对象的安全 我怀疑黑客可能会中断 破解我的数据 谁能详细讲述如何实现这一点 本演示介绍了攻击者如何有效地篡改 Java 序列化流 https www owasp org images e eb OW
  • Numpy 逐元素点积

    有没有一种优雅的 numpy 的方法来按元素应用点积 或者如何将下面的代码翻译成更好的版本 m0 shape 5 3 2 2 m1 shape 5 2 2 r np empty 5 3 2 2 for i in range 5 for j
  • 检查注释是否属于特定类型

    我正在使用反射来查看附加到类属性的注释是否属于特定类型 目前我正在做的 if javax validation Valid equals annotation annotationType getName 这让我觉得有点麻烦 因为它依赖于一
  • 为什么通过UdpClient发送会导致后续接收失败?

    我正在尝试创建一个 UDP 服务器 它可以向所有向其发送消息的客户端发送消息 真实情况要复杂一些 但最简单的方法是将其想象为一个聊天服务器 之前发送过消息的每个人都会收到其他客户端发送的所有消息 所有这一切都是通过UdpClient 在单独
  • LongListSelector 内的缓慢故事板动画

    我有一个 LongListSelector 其中填充了一些项目 每个项目都有一个子菜单 可以使用滑动动画显示或折叠该子菜单 问题是动画非常慢 具体取决于您在列表中点击的项目 开始和结束的时候很慢 中间很顺利 我怀疑每个动画帧都会使长列表选择
  • 将行添加到文件开头

    我可以使用单独的文件来执行此操作 但如何在文件的开头附加一行 f open log txt a f seek 0 get to the first position f write text f close 由于文件是以附加模式打开的 因此
  • cmake 在执行其他操作之前执行进程

    我在执行其他操作之前 CMake 执行进程时遇到问题 下面的代码片段显示了这种情况 if NOT EXISTS CMAKE CURRENT BINARY DIR generated file MAKE DIRECTORY CMAKE CUR