当前位置:网站首页>CMake教程Step5(添加系统自检)
CMake教程Step5(添加系统自检)
2022-07-05 16:36:00 【开始沸腾了】
CMake官方文档
参考官方cmake3.24教程翻译。我这里使用cmake 3.16来演示例子。
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
我的仓库 :
https://github.com/FRBoiling/cmake-tutorial.git
让我们考虑向项目中添加一些依赖于目标平台可能不具备的特性的代码。
对于本例,我们将添加一些依赖于目标平台是否具有log和exp函数的代码。当然,几乎每个平台都有这些功能,但在本教程中假设它们并不常见。
如果平台有log和exp,那么我们将使用它们在mysqrt函数中计算平方根。
我们首先使用MathFunctions/CMakeLists.txt中的CheckCXXSourceCompiles模块来测试这些函数的可用性。
在调用target_include_directories()之后,将log和exp的检查添加到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)
如果可用,使用target_compile_definitions()将HAVE_LOG和HAVE_EXP指定为私有编译定义。
if(HAVE_LOG AND HAVE_EXP)
target_compile_definitions(MathFunctions
PRIVATE "HAVE_LOG" "HAVE_EXP")
endif()
如果log和exp在系统上可用,那么我们将使用它们在mysqrt函数中计算平方根。将以下代码添加到math_functions/mysqrt.cxx中的mysqrt函数中(在返回结果之前不要忘记#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;
我们还需要修改mysqrt.cxx包含cmath头文件。
#include <cmath>
到这里,mysqrt.cxx内容长这样:
#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;
}
运行cmake可执行文件或cmake-gui来配置项目,然后使用您选择的构建工具构建它,并运行教程可执行文件。
测试
现在哪个函数给出了更好的结果,sqrt还是mysqrt?
边栏推荐
- 【729. 我的日程安排錶 I】
- Application of threshold homomorphic encryption in privacy Computing: Interpretation
- Yarn common commands
- 【剑指 Offer】61. 扑克牌中的顺子
- 腾讯音乐上线新产品“曲易买”,提供音乐商用版权授权
- Explain in detail the functions and underlying implementation logic of the groups sets statement in SQL
- 微信公众号网页授权登录实现起来如此简单
- How does the outer disk futures platform distinguish formal security?
- 高数 | 旋转体体积计算方法汇总、二重积分计算旋转体体积
- EasyX second lesson
猜你喜欢

Machine learning compilation lesson 2: tensor program abstraction

一个满分的项目文档是如何书写的|得物技术

Embedded-c Language-1
![[729. My Schedule i]](/img/e3/32914227d00cf7595ee850e60f2b72.png)
[729. My Schedule i]

WSL2.0安装

【729. 我的日程安排錶 I】

PHP人才招聘系统开发 源代码 招聘网站源码二次开发

Precision epidemic prevention has a "sharp weapon" | smart core helps digital sentinels escort the resumption of the city

Learnopongl notes (II) - Lighting

飞桨EasyDL实操范例:工业零件划痕自动识别
随机推荐
齐宣王典故
[Jianzhi offer] 63 Maximum profit of stock
【剑指 Offer】62. 圆圈中最后剩下的数字
7.Scala类
Data verification before and after JSON to map -- custom UDF
时间戳strtotime前一天或后一天的日期
Jarvis OJ shell traffic analysis
Basic introduction to the control of the row component displaying its children in the horizontal array (tutorial includes source code)
C language to get program running time
Thoughtworks 全球CTO:按需求构建架构,过度工程只会“劳民伤财”
SQL injection of cisp-pte (Application of secondary injection)
调查显示传统数据安全工具面对勒索软件攻击的失败率高达 60%
Summary of PHP pseudo protocol of cisp-pte
Cs231n notes (bottom) - applicable to 0 Foundation
[729. My schedule I]
American chips are no longer proud, and Chinese chips have successfully won the first place in emerging fields
Allusions of King Xuan of Qi Dynasty
Embedded UC (UNIX System Advanced Programming) -2
WR | 西湖大学鞠峰组揭示微塑料污染对人工湿地菌群与脱氮功能的影响
国产芯片产业链两条路齐头并进,ASML真慌了而大举加大合作力度