Step08.添加自定义命令和生成的文件-创新互联

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

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

成都创新互联公司凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、成都网站制作、网站设计、网站优化、软件开发、网站改版等服务,在成都10年的网站建设设计经验,为成都近1000家中小型企业策划设计了网站。

移除上一节添加到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.h
  COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  DEPENDS MakeTable
  )

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

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

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

target_include_directories(MathFunctions
          INTERFACE ${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 value
  double result = x;
  if (x >= 1 && x< 10) {
    std::cout<< "Use the table to help find an initial value "<< std::endl;
    result = sqrtTable[static_cast(x)];
  }

  // do ten iterations
  for (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命令。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:Step08.添加自定义命令和生成的文件-创新互联
文章URL:http://cdiso.cn/article/dpcijj.html

其他资讯