添加自定义命令和生成的文件


You
You 2023-12-31 01:17:46 61078
分类专栏: 资讯

添加自定义命令和生成的文件

出于本教程的目的,假设我们决定不再使用平台log和exp函数,而是希望生成一个可在mysqrt函数中使用的预计算值表。在本节中,我们将在构建过程中创建表,然后将该表编译到我们的应用程序中。

首先,让我们删除MathFunctions/CMakeLists.txt中对log和exp函数的检查。然后从mysqrt.cxx中删除对HAVE_LOG和HAVE_EXP的检查。同时,我们可以删除#include <cmath>。

在MathFunctions子目录中,提供了一个名为MakeTable.cxx的新的源文件以生成表。

查看完文件后,我们可以看到该表是作为有效的C++代码生成的,并且输出文件名作为参数传入。

下一步是将适当的命令添加到MathFunctions/CMakeLists.txt文件中,以构建MakeTable可执行文件,然后在构建过程中运行它。需要一些命令来完成此操作。

首先,在MathFunctions/CMakeLists.txt的顶部,添加MakeTable的可执行文件,就像添加任何其他可执行文件一样。

add_executable(MakeTable MakeTable.cxx)

然后,我们添加一个自定义命令,该命令指定如何通过运行MakeTable生成Table.h。

add_custom_command(
  输出 ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  命令 MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  取决于 MakeTable 
  )

接下来,我们必须让CMake知道mysqrt.cxx依赖于生成的文件Table.h。这是通过将生成的Table.h添加到库MathFunctions的源列表中来完成的。

add_library(MathFunctions mysqrt.cxx ${CMAKE_CURRENT_BINARY_DIR}/Table.h)

我们还必须将当前的二进制目录添加到include目录列表中,以便mysqrt.cxx可以找到并包含Table.h。

target_include_directories(MathFunctions
          接口 ${CMAKE_CURRENT_SOURCE_DIR} 
          PRIVATE ${CMAKE_CURRENT_BINARY_DIR} 
          )

现在,我们来使用生成的表。首先,修改mysqrt.cxx以包含Table.h。接下来,我们可以重写mysqrt函数以使用该表:

双 mysqrt(双 x) 
{ 
  if (x <= 0) { 
    return 0; 
  } 

  // 使用表格来帮助找到初始值
  double result = x; 
  if (x >= 1 && x < 10) { 
    std::cout << "使用表格帮助找到初始值 " << std::endl;
    结果 = sqrtTable[static_cast<int>(x)]; 
  } 

  // 进行十次迭代
  for (int i = 0; i < 10; ++i) { 
    if (result <= 0) { 
      result = 0.1; } 
    } 
    double delta = x - (结果 * 结果);
    结果 = 结果 + 0.5 * 增量 / 结果;
    std::cout << "计算 " << x << " 的 sqrt 为 " << result << std::endl;
  返回

  结果;
}

运行cmake或cmake-gui以配置项目,然后使用所选的构建工具进行构建。构建此项目时,它将首先构建MakeTable可执行文件。然后它将运行MakeTable来生成Table.h。最后,它将编译包括了Table.h的mysqrt.cxx,以生成MathFunctions库。运行Tutorial可执行文件,并验证它是否正在使用该表。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=33119
赞同 0
评论 0 条
YouL0
粉丝 0 发表 582 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1486
银河麒麟打印带有图像的文档时出错  1404
银河麒麟添加打印机时,出现“server-error-internal-error”  1193
统信操作系统各版本介绍  1115
统信桌面专业版【如何查询系统安装时间】  1113
统信桌面专业版【全盘安装UOS系统】介绍  1067
麒麟系统也能完整体验微信啦!  1026
统信【启动盘制作工具】使用介绍  671
统信桌面专业版【一个U盘做多个系统启动盘】的方法  615
信刻全自动档案蓝光光盘检测一体机  526
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!