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

news/2025/2/12 18:07:21/

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

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

移除上一节添加到CMakeLists和源文件中的代码。

文件中已经给了MakeTable.cxx文件

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

下一步是将适当的命令添加到MathFunctions/CMakeLists.txt文件以构建MakeTable可执行文件,然后将其作为构建过程的一部分运行。要实现这一点,需要几个命令。

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

add_executable(MakeTable MakeTable.cxx)

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

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.hCOMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.hDEPENDS MakeTable)

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

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

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

target_include_directories(MathFunctionsINTERFACE ${CMAKE_CURRENT_SOURCE_DIR}PRIVATE   ${CMAKE_CURRENT_BINARY_DIR}
)

使用Table.h重写mysqrt

double mysqrt(double x)
{if (x <= 0) {return 0;}// use the table to help find an initial valuedouble result = x;if (x >= 1 && x < 10) {std::cout << "Use the table to help find an initial value " << std::endl;result = sqrtTable[static_cast<int>(x)];}// do ten iterationsfor (int i = 0; i < 10; ++i) {if (result <= 0) {result = 0.1;}double delta = x - (result * result);result = result + 0.5 * delta / result;std::cout << "Computing sqrt of " << x << " to be " << result << std::endl;}return result;
}

构建名编译项目,会自动生成Table.h,并执行MakeTable命令。


http://www.ppmy.cn/news/9498.html

相关文章

C/C++重点八股文

1.C/C关键字 1.1 static&#xff08;静态&#xff09;变量 在C中&#xff0c;关键字static是静态变量&#xff1a; 静态变量只会初始化一次&#xff0c;然后在这函数被调用过程中值不变。在文件内定义静态变量&#xff08;函数外&#xff09;&#xff0c;作用域是当前文件&a…

使用Nordic的nrf52832控制指定从机(一主多从)

一主多从1. 想要实现的功能2. 从机3. 主机3.1 主从机连接个数设置3.2 扫描过滤3.3 连接和断开连接3.4 按键处理3.5 从机读写3.5.1 写3.5.1 读4运行效果1. 想要实现的功能 1.主机能连接多个从机&#xff08;主机作为控制器&#xff0c;从机作为节点&#xff09;。 2.主机能使用…

12个爆款 Java 开源项目

1JavaGuidehttps://github.com/Snailclimb/JavaGuide Star 10503【Java学习面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。2symphonyhttps://github.com/b3log/symphony Star 6664一款用 Java 实现的现代化社区&#xff08;论坛/BBS/社交网络/博客&#xff09;平台…

多线程之线程安全问题

1.线程安全示例 class Count{int a 0;public void add(){a;} } public class ThreadDemo8 {public static void main(String[] args) {Count count new Count();Thread t1 new Thread(()->{for (int i 0; i < 5_0000; i) {count.add();}});Thread t2 new Thread(()…

深度学习各子领域略览及术语列表

诸神缄默不语-个人CSDN博文目录 最近更新时间&#xff1a;2023.1.5 最早更新时间&#xff1a;2023.1.5 有监督supervised / 无监督unsupervised分类 多分类multi-class多标签multi-label极限多标签文本分类XMTC&#xff08;NLP课题入门 | 极限多标签文本分类 NLP课题入门 | 极…

【华为OD机试真题2023 JAVA】查找充电设备组合

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 查找充电设备组合 时间限制:5s 空间限制:256MB 限定语言:不限 题目描述: 某个充电站,可提供n个充电设备,每个充电设备均有对应的输出功率。任意个充电设备组合的输出功率总和,均构成功率集合P的1个元素。功率集…

【三】3D匹配Matching之曲面匹配Surface—Based——create_surface_model()算子

&#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; Halcon算子太多&#xff0c;学习查找都没有系统的学习查找路径&#xff0c;本专栏主要分享Halcon各类算子含义及用法&#xff0c;有…

uniapp 填坑之旅---udb微信小程序端显示异常

功能描述&#xff1a;A页面展示列表a&#xff0c;点击a&#xff0c;进入B页面&#xff0c;展示a对象关联的子对象b。在B页面中&#xff0c;通过unicloud-db组件manual模式加载&#xff0c;具体代码按照官网示例来写。问题描述&#xff1a;代码实现后&#xff0c;一直在H5调试&a…