当前位置:网站首页>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?
边栏推荐
- Disabling and enabling inspections pycharm
- Disabling and enabling inspections pycharm
- About JSON parsing function JSON in MySQL_ EXTRACT
- Vulnerability recurrence - 48. Command injection in airflow DAG (cve-2020-11978)
- Oracle Recovery Tools ----oracle数据库恢复利器
- 漫画:寻找股票买入卖出的最佳时机
- BigDecimal除法的精度问题
- Mysql5.6 parsing JSON strings (supporting complex nested formats)
- Understand the usage of functions and methods in go language
- Read libco save and restore the on-site assembly code
猜你喜欢
Example tutorial of SQL deduplication

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

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

ICML 2022 | Meta提出魯棒的多目標貝葉斯優化方法,有效應對輸入噪聲

Kafaka technology lesson 1

To solve the problem of "double click PDF file, pop up", please install Evernote program

IDEA 项目启动报错 Shorten the command line via JAR manifest or via a classpath file and rerun.
What are the precautions for MySQL group by
Complete solution instance of Oracle shrink table space

论文阅读_医疗NLP模型_ EMBERT
随机推荐
Abnormal recovery of virtual machine Oracle -- Xi Fenfei
leetcode每日一题:字符串中的第一个唯一字符
SQL Server(2)
BigDecimal除法的精度问题
Debug kernel code through proc interface
提高应用程序性能的7个DevOps实践
Ant financial's sudden wealth has not yet begun, but the myth of zoom continues!
Mysql5.6 parsing JSON strings (supporting complex nested formats)
WR | Jufeng group of West Lake University revealed the impact of microplastics pollution on the flora and denitrification function of constructed wetlands
Anaconda中配置PyTorch环境——win10系统(小白包会)
Simple query cost estimation
忽米沄析:工业互联网标识解析与企业信息系统的融合应用
提高應用程序性能的7個DevOps實踐
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
Humi analysis: the integrated application of industrial Internet identity analysis and enterprise information system
This 17-year-old hacker genius cracked the first generation iPhone!
QT console printout
Independent development is a way out for programmers
QT控制台打印输出
Compter le temps d'exécution du programme PHP et définir le temps d'exécution maximum de PHP