当前位置:网站首页>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?
边栏推荐
- 統計php程序運行時間及設置PHP最長運行時間
- 漫画:寻找股票买入卖出的最佳时机
- Cartoon: how to multiply large integers? (next)
- MATLAB查阅
- Complete solution instance of Oracle shrink table space
- 基于YOLOv3的口罩佩戴检测
- 漫画:如何实现大整数相乘?(上) 修订版
- Oracle recovery tools -- Oracle database recovery tool
- 提高应用程序性能的7个DevOps实践
- The five most difficult programming languages in the world
猜你喜欢
What are the precautions for MySQL group by
ICML 2022 | meta proposes a robust multi-objective Bayesian optimization method to effectively deal with input noise
MySql 查询符合条件的最新数据行
提高应用程序性能的7个DevOps实践
论文阅读_中文NLP_LTP
PMP认证需具备哪些条件啊?费用多少啊?
MySQL之知识点(七)
WR | Jufeng group of West Lake University revealed the impact of microplastics pollution on the flora and denitrification function of constructed wetlands
神经网络自我认知模型
Knowledge points of MySQL (6)
随机推荐
Short the command line via jar manifest or via a classpath file and rerun
How MySQL uses JSON_ Extract() takes JSON value
漫画:寻找无序数组的第k大元素(修订版)
To solve the problem of "double click PDF file, pop up", please install Evernote program
PMP认证需具备哪些条件啊?费用多少啊?
Flow characteristics of kitchen knife, ant sword, ice scorpion and Godzilla
神经网络自我认知模型
Rider set the highlighted side of the selected word, remove the warning and suggest highlighting
Webapp development - Google official tutorial
Tita performance treasure: how to prepare for the mid year examination?
MySql 查询符合条件的最新数据行
Disabling and enabling inspections pycharm
MySQL之知识点(六)
Force deduction solution summary 729- my schedule I
tkinter窗口预加载
北京内推 | 微软亚洲研究院机器学习组招聘NLP/语音合成等方向全职研究员
基于YOLOv3的口罩佩戴检测
7. Scala class
提高应用程序性能的7个DevOps实践
Disorganized series