具有自动生成源的 Cmake 可执行文件

2024-01-24

我想从 test_runner.cpp 中创建一个可执行文件:

add_executable(myexe ${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp)

但这个特定的 cpp 文件本身是在预构建命令中自动生成的:

add_custom_command(
    TARGET myexe PRE_BUILD
    COMMAND deps/cxxtest-4.4/bin/cxxtestgen --error-printer -o "${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp" src/My_test_suite.h
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)

但现在我无法生成新的 cmake 构建文件,因为它抱怨缺少源代码,而在预构建之前确实缺少源代码。


问题的关键在于应用GENERATED财产 http://www.cmake.org/cmake/help/v3.3/prop_sf/GENERATED.html到“test_runner.cpp”。这告诉 CMake 不要在配置时检查它的存在,因为它是作为构建过程的一部分创建的。

您可以手动应用此属性(例如使用set_source_files_properties)。然而,处理这个问题的正确方法是使用另一种形式add_custom_command http://www.cmake.org/cmake/help/v3.3/command/add_custom_command.html, i.e. add_custom_command(OUTPUT ...)而不是add_custom_command(TARGET ...).

如果您指定“test_runner.cpp”作为输出add_custom_command(OUTPUT ...)调用,那么使用它的任何目标(在本例中为“myexe”)将导致在构建该目标之前调用自定义命令。

因此,您实际上只需将代码更改为:

set(TestRunner "${CMAKE_CURRENT_BINARY_DIR}/test_runner.cpp")
add_executable(myexe ${TestRunner})
add_custom_command(
    OUTPUT ${TestRunner}
    COMMAND deps/cxxtest-4.4/bin/cxxtestgen --error-printer -o "${TestRunner}" src/My_test_suite.h
    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有自动生成源的 Cmake 可执行文件 的相关文章

  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • C# AES Rijndael - 检测无效密码

    我正在使用 Rijndael 加密程序中的一些敏感数据 当用户输入错误的密码时 大多数情况下CryptographicException抛出消息 填充无效且无法删除 然而 CryptStream 不会抛出密码错误的异常 而是返回错误解密的流
  • 如何指定CMAKE外部项目的编译器?

    我使用ExternalProject Add 包含一个外部项目 我想要的是能够做到 cmake DCMAKE CXX COMPILER
  • 静态成员函数与C语言绑定?

    以下 C 代码可使用 Visual C 和 g 进行编译 struct S static void foo extern C void S foo struct T static void foo extern C void T foo a
  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • 将 LINQ to Entities 查询中的每个项目转换为接口的最佳方法是什么?

    我有一个实现 IUser 的实体对象 User IQueryable
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • “volatile void function( ... )” 做了什么?

    我见过从语法角度来看 C 函数中 volatile 关键字有多少种用法 https stackoverflow com questions 7643528 how many usage does volatile keyword have
  • 让 GCC/Clang 使用 CMOV

    我有一个简单的标记值联合 这些值可以是int64 ts or doubles 我正在对这些联合进行加法 但需要注意的是 如果两个参数都代表int64 t值 那么结果也应该有一个int64 t value 这是代码 include
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • C++ std:.auto_ptr 或 std::unique_ptr (支持多个编译器,甚至是旧的 C++03 编译器)?

    我正在尝试更新一些 C 代码 我想转向更现代的代码 c 11 但我仍然需要使用一些较旧的编译器 兼容 c 03 来编译代码 因为支持的平台限制 我知道在 C 11 编译器中 std auto ptr 已被弃用 但由于较旧的编译器支持 我不能
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On

随机推荐

  • 一个类什么时候应该是 Comparable 和/或 Comparator?

    我见过同时实现这两个功能的类可比 and 比较器 这是什么意思 我为什么要使用其中一种而不是另一种 以下文字来自比较器与可比较器 http www digizol com 2008 07 java sorting comparator vs
  • CIDR 地址不在 VPC 的 CIDR 地址范围内

    我已在适用于 AWS 的新 VPC 上尝试了 CIDR 块的所有 IP 范围组合 我当前的 CIDR 是172 31 0 0 16 171 31 0 0 32 CIDR Address is not within CIDR Address
  • SignalR 不使用服务器上的会话

    当我尝试访问HttpContext从 HUB 返回的当前会话null 我尝试使用该界面IRequiresSession但它不起作用 有人能帮我吗 SignalR 连接 包括客户端所有 Hub 操作的底层连接 不支持会话状态 如果您愿意 您可
  • Python SqlAlchemy 实用生成表类

    给定表名列表 我尝试以编程方式生成 SqlAlchemy 数据库表类 这是我所做的 def generate table class list engine base declarative base engine table names
  • SSDT 未解决参考错误 SQL71561

    我已将数据库导入到数据库项目中 但一开始我就收到了 200 多个有关未解析引用的错误 现在我已经阅读了一些像这样的帖子和网站 http blogs msdn com b bahill archive 2009 08 26 using sel
  • JPA 不急切地加载所有内容

    我在通过 OpenJPA 实现利用 JPA 1 0 时遇到问题 我的数据模型由一个 Trip 组成 该 Trip 与 Leg 具有一对多关系 与 Passenger 具有一对多关系 Leg 和 Passenger 在 PassengerLe
  • SQL 多重连接语句

    当我的 SQL 语句中只有一个内部联接时 它运行得很好 我尝试加入第二个表 现在收到一条错误消息 指出存在语法错误 缺少运算符 这里有什么问题吗 adsFormView SelectCommand SELECT FROM tableCour
  • 如何根据 Big Query 中的 UTC 时间戳在 Data Studio 中显示本地时区的日期/时间

    我希望 Google Data Studio 报告使用用户的本地时区显示销售数据 包括按小时销售的热图报告 我将数据存储在 BigQuery 中 时间戳字段存储为 UTC Per 听起来时间戳应该存储为 UTC 我正在这样做 我认为 Dat
  • 在 PySpark 中使用 Apache Spark 数据帧删除重音的最佳方法是什么?

    我需要从不同数据集中删除西班牙语和其他语言字符的重音 我已经根据这里提供的代码做了一个函数post https stackoverflow com questions 517923 what is the best way to remov
  • OOP Javascript - 隔离类内的对象

    我试图拥有一个可以创建多个实例的主对象 每个实例都继承子对象 具有唯一 隔离的属性 然而 当我这样做时 所有创建的对象的对象属性 更改后 都会发生变化 我可能没有正确解释这一点 但这个例子应该很清楚 Main function Extend
  • JQuery 抖动对错误的影响

    当用户输入不正确的信息时 我试图在我的登录页面上应用摇动效果 此时 如果用户提交了不正确的详细信息 页面将刷新 打印 PHP 通知 并通过 JS 使通知 div 可见 我正在尝试使用变得可见的通知来识别信息不正确并切换摇动效果 HTML d
  • 我想在 print 语句之后而不是之前向用户询问 c 的值。怎么做?

    该程序询问 a b 和 c 的值 然后打印 print 语句 我想在打印 print 语句之前询问 c 的值 set serveroutput on set verify off DECLARE a number a b number a
  • Magento:系统/配置在多选中添加自定义值

    我创建了一个简单的模块 我已经创建了system xml 有一个字段多选我想在多选字段中添加自定义值 是否可以在多选字段中添加自定义值
  • MVC DateTime 文本框格式问题

    我想做类似的事情 model PickupDate ToString d 但 MVC4 不太喜欢这样 PickupDate is a DateTime字段 我想在视图中显示时去掉时间部分 同时保留new id date1 绑定的代码Text
  • Rails ActiveJob - 处理 ActionMailer::DeliveryJob 中的异常的好方法是什么

    我在用ActiveJob Sidekiq在我的 Rails 项目中进行任务处理 我直接使用发送邮件MyMailer some deliver later 它会自动创建一个ActionMailer DeliveryJob任务并将其放入Side
  • 如何使用ndb光标翻到上一页?

    我无法设法进入 ndb 分页中的 上一页 我已经检查过文档 https developers google com appengine docs python ndb queries cursors还有这个类似的在这里提问 https st
  • jQuery 中触发退格键

    如何在 jQuery 中触发退格键事件 以下示例不起作用 var e jQuery Event backspace keyCode 8 myarea trigger e 你实际上无法触发它 例如 您可以从某个输入中删除最后一个字符 但无法触
  • 返回范围的 SQL Select 查询[重复]

    这个问题在这里已经有答案了 可能的重复 MS SQL Server 中的行偏移 https stackoverflow com questions 187998 row offset in ms sql server 我想选择从 x1 到
  • 如何优雅地处理请求中的连接错误?

    我有一个简单的 python 电报机器人 代码如下 import requests import json from time import sleep import os filename bot last update target o
  • 具有自动生成源的 Cmake 可执行文件

    我想从 test runner cpp 中创建一个可执行文件 add executable myexe CMAKE CURRENT BINARY DIR test runner cpp 但这个特定的 cpp 文件本身是在预构建命令中自动生成