当前位置:网站首页>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?
边栏推荐
- Design of electronic clock based on 51 single chip microcomputer
- Knowing that his daughter was molested, the 35 year old man beat the other party to minor injury level 2, and the court decided not to sue
- Ordinary programmers look at the code, and top programmers look at the trend
- CVPR 2022最佳学生论文:单张图像估计物体在3D空间中的位姿估计
- 統計php程序運行時間及設置PHP最長運行時間
- tkinter窗口预加载
- Summary of optimization scheme for implementing delay queue based on redis
- 每日一练:关于日期的一系列
- 数据访问 - EntityFramework集成
- 得知女儿被猥亵,35岁男子将对方打至轻伤二级,法院作出不起诉决定
猜你喜欢

leetcode每日一题:字符串中的第一个唯一字符

Beijing internal promotion | the machine learning group of Microsoft Research Asia recruits full-time researchers in nlp/ speech synthesis and other directions

北京内推 | 微软亚洲研究院机器学习组招聘NLP/语音合成等方向全职研究员
In depth understanding of redis memory obsolescence strategy

每日一练:关于日期的一系列

提高应用程序性能的7个DevOps实践

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

33: Chapter 3: develop pass service: 16: use redis to cache user information; (to reduce the pressure on the database)

Alpha conversion from gamma space to linner space under URP (II) -- multi alpha map superposition

ICML 2022 | Meta提出魯棒的多目標貝葉斯優化方法,有效應對輸入噪聲
随机推荐
较文心损失一点点性能提升很多
Force deduction solution summary 1200 minimum absolute difference
leetcode每日一题:字符串中的第一个唯一字符
哈趣K1和哈趣H1哪个性价比更高?谁更值得入手?
Cartoon: looking for the k-th element of an unordered array (Revised)
Design of electronic clock based on 51 single chip microcomputer
mongodb(快速上手)(一)
解读:如何应对物联网目前面临的安全问题?
PMP认证需具备哪些条件啊?费用多少啊?
一文了解Go语言中的函数与方法的用法
2022 information system management engineer examination outline
Webapp development - Google official tutorial
Cloud security daily 220705: the red hat PHP interpreter has found a vulnerability of executing arbitrary code, which needs to be upgraded as soon as possible
求解为啥all(())是True, 而any(())是FALSE?
Humi analysis: the integrated application of industrial Internet identity analysis and enterprise information system
Debug kernel code through proc interface
WebApp开发-Google官方教程
The comprehensive competitiveness of Huawei cloud native containers ranks first in China!
ICML 2022 | Meta提出鲁棒的多目标贝叶斯优化方法,有效应对输入噪声
Please tell me why some tables can find data by writing SQL, but they can't be found in the data map, and the table structure can't be found