cmake学习笔记(五)

添加系统检测

检测代码环境中是否存在某些库文件,在MathFunctions/CMakeLisits.txt添加如下代码:

include(CheckSymbolExists)
check_symbol_exists(log "math.h" HAVE_LOG)
check_symbol_exists(exp "math.h" HAVE_EXP)
if(NOT (HAVE_LOG AND HAVE_EXP))unset(HAVE_LOG CACHE)unset(HAVE_EXP CACHE)set(CMAKE_REQUIRED_LIBRARIES "m")check_symbol_exists(log "math.h" HAVE_LOG)check_symbol_exists(exp "math.h" HAVE_EXP)if(HAVE_LOG AND HAVE_EXP)target_link_libraries(MathFunctions PRIVATE m)endif()
endif()

如果代码环境中有log和exp,我们将使用他们来计算mysqrt函数中的平方根,使用
check_symbol_exists来检测这些函数的可用性,如果没有这些函数,则检测m库是否含有log和exp,有则链接到m库。

在MathFunctions/CMakelists.txt添加如下代码:

if(HAVE_LOG AND HAVE_EXP)target_compile_definitions(MathFunctionsPRIVATE "HAVE_LOG" "HAVE_EXP")
endif()

如果可用,使用target_compile_definitions()将HAVE_LOG和HAVE_EXP指定为私有编译定义。

将如下代码添加到MathFunctions/mysqrt.cxx文件中:

#if defined(HAVE_LOG) && defined(HAVE_EXP)double result = exp(log(x) * 0.5);std::cout << "Computing sqrt of " << x << " to be " << result<< " using log and exp" << std::endl;
#elsedouble result = x;
#endif

使mysqrt.cxx包含头文件cmath:

#include <cmath>

运行可执行文件。

cmake学习笔记(五)相关推荐

  1. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  2. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  3. cmake 学习笔记(三) (转)

    接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...

  4. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  5. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  6. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

  7. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  8. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  9. CMake 学习笔记 02 - 更复杂的项目

    CMake 学习笔记 02 - 更复杂的项目 源代码见 https://github.com/fengyc/cmake-tutorial 源代码目录组织 一般的项目,会划分为多个子目录,每个子目录中包 ...

最新文章

  1. 5菜鸟教程_XPLANE10菜鸟基础教程系列 飞机、机场以及天气的设置
  2. python脚本编写_如何用Python包编写一个简单的脚本,表达你对父母的爱?
  3. oracle和dba,oracle db、dba和rdba
  4. 海蜘蛛路由弹窗广告破解
  5. 【Android】对话框 AlertDialog
  6. windows下安装和使用scrapy
  7. Vue笔记-vue3中.en.dev文件及axios.defaults.baseURL的使用
  8. vuex mysql_Vue插件---Vuex(仓库,数据库)
  9. mysql slave修改_MySql主从复制(初学笔记)
  10. 单片机c语言数字频率计课程设计,单片机数字频率计设计和调试 课程设计论文...
  11. centos开机卡进度解决方案
  12. 修改文件类型(txt文件改为bat、sh文件)
  13. Android 解析微信基础表情并显示
  14. 关于反转的总结(C/C++)
  15. windows10下使用minGW64 编译krita源码报错
  16. 从0开发游戏引擎之引擎基础组件-Node类实现
  17. mysql 对账语句_关于对账的一些理解
  18. 网页的linke rel=icon详解 favicon深究
  19. 微信5秒超时 php异步,微信公众号-5秒内不回复测试并处理方案,顺便复习php 时间执行...
  20. XXL-JOB 任务调度中心 后台任意命令执行漏洞

热门文章

  1. iCloud空间莫名被Mac文档占用.
  2. linux 关机命令
  3. Linux服务器安装Windows虚拟机
  4. 富有哲理性的一句话,敌人和朋友
  5. TortoiseSVN添加鼠标右键菜单
  6. 安装mysql对电脑有什么要求_在同台电脑上再次安装MySql需要注意的事项
  7. 华泰实施国强-Symix ERP软件(zt)
  8. OpenGL_Qt学习笔记之_07(闪烁的星星)
  9. VBS带你领略脚本语言的快乐!(入门篇)
  10. 利用Web玩转树莓派