CMake 学习笔记(子目录 续)

这篇博客接着上篇。我们的目录结构和上一个例子完全相同。

CMakeLists.txt
MathFunctions|- CMakeLists.txt|- MathFunctions.cxx|- MathFunctions.h|- mysqrt.cxx|- mysqrt.htutorial.cxx
TutorialConfig.h.in

在上一个例子中,为了包含 MathFunctions 库。我们在最上一层的 CMakeLists.txt 文件中加入了如下几行:

add_subdirectory(MathFunctions)
target_link_libraries(Tutorial PUBLIC MathFunctions)
target_include_directories(Tutorial PUBLIC"${PROJECT_BINARY_DIR}""${PROJECT_SOURCE_DIR}/MathFunctions")

我们希望把这里尽可能的简化。其中 target_include_directories() 是可以省略掉的。其实也不是省略掉,而是可以挪到子目录下的 CMakeLists.txt 中。

我们先看一下改进后的 MathFunctions 目录下的 CMakeList.txt。

add_library(MathFunctions MathFunctions.cxx)
target_include_directories(MathFunctionsINTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

这里说一下, CMAKE_CURRENT_SOURCE_DIR 表示当前的源代码目录。

这样上层的 CMakeLists.txt 就只需要如下:

cmake_minimum_required(VERSION 3.10)# set the project name and version
project(Tutorial VERSION 1.0)# add the MathFunctions library
add_subdirectory(MathFunctions)add_library(tutorial_compiler_flags INTERFACE)
target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)# configure a header file to pass some of the CMake settings
# to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)# add the executable
add_executable(Tutorial tutorial.cxx)# TODO 5: Link Tutorial to tutorial_compiler_flagstarget_link_libraries(Tutorial PUBLIC MathFunctions)# TODO 3: Remove use of EXTRA_INCLUDES# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC"${PROJECT_BINARY_DIR}")

上面代码有点长,其实为了引入 MathFunctions 只有

add_subdirectory(MathFunctions)
target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)

上面的代码里出现了 tutorial_compiler_flags, 这里也要解释几句。tutorial_compiler_flags 是什么呢?是个虚拟的库。

add_library(tutorial_compiler_flags INTERFACE)
target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)

这两行的作用是代替下面的两行:

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

之所以要代替这两行,是因为这两行是全局的。对编译的每个文件都起作用。而 tutorial_compiler_flags 是局部的,只有

target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)

只有在编译 Tutorial 时会启用 cxx_std_11 这个 编译选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/5067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链:哈希算法与一致性哈希算法

本篇主要介绍区块链中常用到的哈希算法。 1 哈希算法 1.1 定义及特性 哈希算法是指通过哈希函数(Hash Function)对任意长度的输入数据(比如文件、消息、数字等)进行转换,生成一个固定长度的哈希值(Hash Value)的过程。   在区块链中,哈希算法常用于区…

蓝桥杯上岸每日N题 第一期(一)!!!

大家好 我是寸铁💪 考前需要刷大量真题,大家一起相互监督,每日做N题,一起上岸吧✌️ ~ 第一期(一) 题目:回文日期 ✨ 考点:枚举模拟 💪 该题目类型会同时收录在相关复习专题,供大家学习 收…

计算机网络基础-OSI七层模型 和 TCP/IP四层模型的对比

OSI七层模型 和 TCP/IP四层模型的对比 OSI七层模型: 理论上的网络通信模型 记忆: (物、链、网、输、会、示、用) TCP/IP四层模型: 实际上的网络通信标准 (1) 七层网络体系结构各层的主要功能: 应用层: 最上层的&am…

Nginx配置整合:基本概念、命令、反向代理、负载均衡、动静分离、高可用

一、基本概念 1.什么是Nginx Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理server。其特点是占有内存少。并发能力强,其并发能力确实在同类型的网页server中表现较好。 http服务器 Web服务器是指驻留于因特网上某种类型计算机的程…

请问支付功能如何测试

目录 01测试思维 02支付功能的测试点 一:支付的分类: 二:功能测试 三:接口测试 四:安全测试 五:测试点 01测试思维 要分析测试点之前,我们先来梳理一下测试思维。总结来说,任…

IP首部报文字段

一、IP首部报文字段 字段如下图所示 二、每个字段的含义 版本 表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4 首部长度 这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节&#xff0…

分布式事务 Seata

分布式事务 Seata 事务介绍分布式理论Seata 介绍Seata 部署与集成Seata TC Server 部署微服务集成 Seata XA 模式AT 模式AT 模式执行过程读写隔离写隔离读隔离 实现 AT 模式 TCC 模式TCC 模式介绍实现 TCC 模式 Saga 模式Seata 四种模式对比 事务介绍 事务(Transac…

uniapp引入echarts

作为前端在开发需求的时候经常会遇到将数据展示为图表的需求,之前一直用的HBuilder的图表插件uCharts,使用方法可以参考我的另一篇博客:uniapp 中使用图表(秋云uCharts图表组件) 但是最近发现uCharts很多功能都需要付…

Bard:一个可以描述图像的人工智能

Bard 是一个大型语言模型,可以对各种提示和问题进行交流和生成类似人类的文本。它接受了大量的文字和代码训练,可以生成文本、翻译语言、编写不同类型的创意内容,并以信息丰富的方式回答你的问题。 Bard 还可以识别图像。它可以识别图像中的…

代理IP、Socks5代理、SK5代理与网络安全:保护隐私与防御威胁的技术探索

随着数字化时代的到来,网络安全和个人隐私保护日益成为重要议题。代理IP、Socks5代理和SK5代理作为关键技术手段,为用户提供了保护隐私、提高网络安全性和防御网络威胁的解决方案。本文将深入探讨这些代理技术的原理、特点以及它们与网络安全的紧密联系。…

数组的递归筛选

数组递归筛选 根据一个值筛选出来通过 includes 递归 const options [{name: "ikun",options: [{name: "YAY11",},],},{name: "YAY",}, ];function findValue(orgOptions,val) {let newArr1 []orgOptions.forEach(item>{if(item.options…

ASUS华硕无双15_K3502ZA工厂模式原装Win11恢复原厂OEM预装系统 带ASUS Recovey恢复功能

ASUS华硕无双15笔记本电脑12代Vivobook_ASUSLaptop K3502ZA出厂Windows11系统工厂包 自带恢复功能、所有驱动、出厂主题壁纸LOGO、Office办公软件、MyASUS等预装程序 所需要工具:32G或以上的U盘 文件格式:HDI,SWP,OFS,EDN,KIT,TLK多个底包 文件大小&…

leetcode 40. 组合总和 II

2023.7.19 此题为 组合总和 的升级版。本题的特殊之处在于 给定的candidates数组只一个无序且包含重复元素的数组,并且最终的解集不能包含重复的组合。 所以本题的关键在于去重。那么,此类题的去重分为两种,一种是解集内部去重,灵…

Spring Boot学习

Spring Boot 配置 同一目录下配置文件优先级:.properties > .yml > .yaml 错误:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 Caused by: java.nio.charset.MalformedInputException: Inp…

VUE- 选取本地图片,自定义裁切图片比例 vue-cropper

裁切图片,按照比例裁切,分步骤 1:el-upload选择本地图片(分选择本地和上传两步骤) 2:在on-change回调方法中拿到el-upload选中的图片,显示在vueCropper上()。 2.1&…

查看IP地址方法(电脑IP地址方法)

查看IP地址方法 如何识别win7还是win10系统? (一)Win7系统电脑导航栏如下: (二)Win10系统电脑导航栏如下: 一、win7系统查看IP地址 方法一:查看网络设置 点击电脑导航栏最右下…

react和vue2/3父子组件的双向绑定(sync、emit、v-model)

目录 Vue .sync(2.3.0) $emit (2.3后) 自定义组件的 v-model 2.2.0 v-modelemits(3.0取消了.sync) React 父组件回调函数 相关基础 框架 MVC (Model View Controller)/MVP(Model View…

STM32 Proteus仿真可设置时间红绿灯-0075

STM32 Proteus仿真可设置时间红绿灯-0075 Proteus仿真小实验: STM32 Proteus仿真可设置时间红绿灯-0075 功能: 硬件组成:STM32F103C6单片机 74HC595串入并出芯片4个2位数码管显示十字路口红绿灯时间多个按键 1.包含机动车指示灯(红、黄、…

windows安装mysql8.0.23版本成功示例-免安装

windows安装mysql8.0.23版本成功示例 一.通过mysql-installer-*.msi安装包的方式1.安装准备1.1 官网下载地址1.2 选择合适的版本点击下载 2.安装mysql 二.通过mysql-8.0.23-winx64.zip免安装方式-推荐1.安装准备1.1 下载官网压缩包1.2 解压后配置文件my.ini信息1.3 配置my.ini …

STM32MP157驱动开发——按键驱动(查询方式)

文章目录 概述APP 读取按键的 4 种方法查询方式休眠-唤醒方式poll 方式异步通知方式 查询方式的按键驱动程序(框架)按键驱动编写思路board_xxx.cbutton_drv.cbutton_drv.hbutton_test.cMakefile编译测试 查询方式的按键驱动程序(stm32mp157)board_stm32m…