当前位置:网站首页>Cmake tutorial step5 (add system self-test)
Cmake tutorial step5 (add system self-test)
2022-07-05 17:45:00 【It's beginning to boil】
CMake Official documents
Refer to the official cmake3.24 Course translation . I'm going to use cmake 3.16 To demonstrate examples .
https://cmake.org/cmake/help/v3.24/guide/tutorial/index.html
https://gitlab.kitware.com/cmake/cmake/-/tree/master/Help/guide/tutorial
step5
https://cmake.org/cmake/help/v3.24/guide/tutorial/Adding%20System%20Introspection.html
My warehouse :
https://github.com/FRBoiling/cmake-tutorial.git
Let's consider adding some code to the project that depends on features that the target platform may not have .
For this example , We will add some that depend on whether the target platform has log and exp Function code . Of course , Almost every platform has these functions , But assume in this tutorial that they are not common .
If the platform has log and exp, Then we will use them in mysqrt Calculate the square root in the function .
We use MathFunctions/CMakeLists.txt Medium CheckCXXSourceCompiles Module to test the usability of these functions .
Calling target_include_directories() after , take log and exp The check of is added to MathFunctions/CMakeLists.txt:
target_include_directories(MathFunctions
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
)
# does this system provide the log and exp functions?
include(CheckCXXSourceCompiles)
check_cxx_source_compiles("
#include <cmath>
int main() {
std::log(1.0);
return 0;
}
" HAVE_LOG)
check_cxx_source_compiles("
#include <cmath>
int main() {
std::exp(1.0);
return 0;
}
" HAVE_EXP)
If available , Use target_compile_definitions() take HAVE_LOG and HAVE_EXP Specify private compilation definitions .
if(HAVE_LOG AND HAVE_EXP)
target_compile_definitions(MathFunctions
PRIVATE "HAVE_LOG" "HAVE_EXP")
endif()
If log and exp Available on the system , Then we will use them in mysqrt Calculate the square root in the function . Add the following code to math_functions/mysqrt.cxx Medium mysqrt Function ( Don't forget before returning the result #endif):
#if defined(HAVE_LOG) && defined(HAVE_EXP)
double result = std::exp(std::log(x) * 0.5);
std::cout << "Computing sqrt of " << x << " to be " << result
<< " using log and exp" << std::endl;
#else
double result = x;
We still need to revise it mysqrt.cxx contain cmath The header file .
#include <cmath>
Come here ,mysqrt.cxx The content is long like this :
#include <cmath>
#include <iostream>
#include "MathFunctions.h"
// a hack square root calculation using simple operations
double mysqrt(double x)
{
if (x <= 0) {
return 0;
}
// if we have both log and exp then use them
#if defined(HAVE_LOG) && defined(HAVE_EXP)
double result = std::exp(std::log(x) * 0.5);
std::cout << "Computing sqrt of " << x << " to be " << result
<< " using log and exp" << std::endl;
#else
double result = 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;
}
#endif
return result;
}
function cmake Executable or cmake-gui To configure the project , Then build it using the build tool of your choice , And run the tutorial executable .
test
Now which function gives a better result ,sqrt still mysqrt?
边栏推荐
- Flow characteristics of kitchen knife, ant sword, ice scorpion and Godzilla
- 查看自己电脑连接过的WiFi密码
- The five most difficult programming languages in the world
- Abnormal recovery of virtual machine Oracle -- Xi Fenfei
- 较文心损失一点点性能提升很多
- Accuracy of BigDecimal Division
- 提高應用程序性能的7個DevOps實踐
- Customize the theme of matrix (I) night mode
- PMP认证需具备哪些条件啊?费用多少啊?
- c#图文混合,以二进制方式写入数据库
猜你喜欢

MySQL之知识点(六)

Winedt common shortcut key modify shortcut key latex compile button

服务器配置 jupyter环境

c#图文混合,以二进制方式写入数据库

Server configuration jupyter environment

Count the running time of PHP program and set the maximum running time of PHP

Check the WiFi password connected to your computer

統計php程序運行時間及設置PHP最長運行時間

论文阅读_医疗NLP模型_ EMBERT

十个顶级自动化和编排工具
随机推荐
Customize the theme of matrix (I) night mode
统计php程序运行时间及设置PHP最长运行时间
BigDecimal除法的精度问题
This 17-year-old hacker genius cracked the first generation iPhone!
C # realizes crystal report binding data and printing 3-qr code barcode
漫画:寻找股票买入卖出的最佳时机
Read the history of it development in one breath
flask接口响应中的中文乱码(unicode)处理
普通程序员看代码,顶级程序员看趋势
Independent development is a way out for programmers
tkinter窗口预加载
MySQL之知识点(七)
漫画:一道数学题引发的血案
The comprehensive competitiveness of Huawei cloud native containers ranks first in China!
得知女儿被猥亵,35岁男子将对方打至轻伤二级,法院作出不起诉决定
Tita performance treasure: how to prepare for the mid year examination?
Summary of optimization scheme for implementing delay queue based on redis
如何保存训练好的神经网络模型(pytorch版本)
论文阅读_中文NLP_LTP
Check the WiFi password connected to your computer