cmake 进阶

CMake 学习四:CMake 构建静态库和动态库 阅读详情

函数类

cmake_policy

标准设置

option

if else 条件变量依赖的默认值设置
option(address "This is a option for address" ON)

CMakeDependentOption

可能需要添加一行
include(CMakeDependentOption)
表示如果这样那么那样这些事情

file

见CMakeFile命令之file

get_filename_component

得到一个完整文件名中的特定部分。

set_target_properties

添加静态库

ADD_LIBRARY(hello STATIC ${STATIC_LIBRARY})
因为默认规则是不能有相同名字的共享库与静态库,所以当生成静态库的时候(so后缀),共享库会被删除,因为只能允许一个名字存在,相同名字的会被替代(hello),所以需要通过SET_TARGET_PROPERTIES()来解决这个问题,例子:
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
cmake在构建一个target的时候,会删除之前生成的target,一样是通过设置SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)来达到目的

动态库的版本号:

同样是通过SET_TARGET_PROPERTIES()来设置
SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)
VERSION:动态库版本
SOVERSION:API版本
最后生成的结果是:
libhello.so.1.2
libhello.so.1->libhello.so.1.2
libhello.so->libhello.so.1

add_dependencies

定义target依赖的其它target,确保在编译本target之前,其它的target已经被构建。ADD_DEPENDENCIES(target-name depend-target1 depend-target2 …)

set_property

其他函数

见cmake 学习笔记
CMake 手册详解

语法类

if else

if (MSVC)
  # Add the "lib" prefix for generated .lib outputs.
  set(LIB_PREFIX lib)
else (MSVC)
  # When building with "make", "lib" prefix will be added automatically by
  # the build tool.
  set(LIB_PREFIX)
endif (MSVC)```
##foreach
 ```   foreach(flag_var
        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
      if(${flag_var} MATCHES "/MD")
        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
      endif(${flag_var} MATCHES "/MD")
    endforeach(flag_var)

自定义function

function(add_examples_build NAME)

  ExternalProject_Add(${NAME}
    PREFIX ${NAME}
    SOURCE_DIR "${examples_dir}"
    BINARY_DIR ${NAME}
    STAMP_DIR ${NAME}/logs
    INSTALL_COMMAND "" #Skip
    LOG_CONFIGURE 1
    CMAKE_CACHE_ARGS "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}"
                     "-Dprotobuf_VERBOSE:BOOL=${protobuf_VERBOSE}"
                     ${ARGN}
  )
  set_property(TARGET ${NAME} PROPERTY FOLDER "Examples")
  set_property(TARGET ${NAME} PROPERTY EXCLUDE_FROM_ALL TRUE)
endfunction()
CMAKE进阶学习 CMAKE进阶第一阶段:单细胞生物第二阶段:多细胞生物草履虫有机生物 因为研究ORB_SLAM2的代码需要梳理程序的整个架构,需要看很多CMakeLists.txt,所以最终还是得好好研究一下cmake的语法和用法,大写的悲伤: CMAKE官网: https://cmake.org/ 第一阶段:单细胞生物 指导原则:指令是大小写无关的,参数和变量是大小写相关的。但,推荐你全部使用大写指令。 PROJECT(HELLO) #工程名 语法:PROJECT(projectname [CXX] [C] [Java 阅读详情

相关推荐

CMake基础教程(33)get_filename_component提取文件名成分

get_filename_component这个命令挺有用的,可以用来提取完整文件名的成分。 get_filename_component(<var> <FileName> <mode> [CACHE]) FileName是文件的完整路径,如/etc/config/system.yaml,我们可以从中提取出文件后缀、路径、文件名到变量var。提取的成分由mode指定,mode支持以下值: DIRECTORY = Directory without file name N

二进制君 1万+

cmake(三十一)Cmake之get_filename_component指令

一 基础知识 cmake获取'文件名'的'特定'部分,提供了'三种'调用方式 ① 方式1 ② 方式2 ③ 方式3 二 实践 (1)路径 ① 项目结构 ② CMakeLists.txt文件 ③ 测试 (2)绝对路径 ① CMakeLists.txt文件 ② 测试 (3)链接 ① 文件不存在 ② 创建符号链接文件CMakeLists.txt.link (4...

wzj_110的博客 1万+

CMake入门教程【高级篇】获取文件信息get_filename_component

CMake获取文件信息get_filename_component

小鱼酱的博客 1190

CMake函数:get_filename_component——从文件路径中提取特定组件

是CMake中的一个命令,用于从文件路径中提取特定组件(例如目录、文件名、扩展名等)。

zhaominyong的专栏 1064

图像特征(一)——颜色特征(颜色直方图,颜色矩,颜色集,颜色聚合向量和颜色相关图)

本文主要是为了更好地理解图像特征,理解各方法的原理。转载请注明出处https://mp.youkuaiyun.com/console/editor/html/105090183 图像模式识别的一般步骤为:输入图像--图像预处理--特征提取--特征选择--图像分类--输出结果。 图像特征主要有:颜色特征、形状特征、纹理特征和空间关系特征。 本文主要介绍颜色特征,并给出matlab上实现的demo。 颜...

gloria_iris的博客 3万+

16QAM调制解调仿真(matlab,详细介绍仿真方案的设计、结果及结论、完整代码及注释)

16QAM调制解调仿真目录一、仿真要求二、仿真方案详细设计三、仿真结果及结论四、仿真代码 一、仿真要求 1.用基带等效的方式仿真16-QAM在AWGN信道下的误码率和误比特率性能,并与理论值相比较; 2.高阶与低阶的性能比较。 二、仿真方案详细设计 三、仿真结果及结论 仿真结果 16QAM的星座点图 64QAM的星座点图 16QAM加噪声后的星座点图 64QAM加噪声后的星座点图 16-QAM载波调制信号在AWGN信道下的误比特率性能比较 结论:由图可知,16QAM的误符号率

mango 5万+

CMake进阶教程

本文是该系列的进阶教程,将会介绍一些CMake的进阶用法,帮助我们更好地管理更复杂的项目。

支离Chilly的博客 1868

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227

CMake学习进阶流程

您将学习如何在 CMake 中设置编译选项、定义条件编译,以及如何更有条件地控制构建过程。CMake 允许您为不同的编译器设置特定的编译选项。例如,您可能希望在调试模式下启用更多的警告或开启优化。设置步骤修改 CMakeLists.txt 添加编译选项在文件中,您可以使用或来定义编译选项。例如,添加对 GCC 和 Clang 编译器的优化和警告设置:cmake_minimum_required(VERSION 3.10)# 添加编译选项。

qq_42902201的博客 1701

WSL2 Ubuntu复现FoundationPose项目(docker)

复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2

woaidawangwang的博客 2000

深入理解搜索引擎——搜索评价指标

    搜索引擎,在做好query理解、索引召回以及排序模型之后,就能直接推上线了吗?答案是否定的,还需对其性能和质量进行评测。性能无非是对时间和空间的运行效率作评测,不细讲,今天讲讲搜索引擎的质量评测。通过质量评测,可根据评测结果不断的进行改进和研究,也可以验证搜索引擎在真实环境中运行时的实际效果。因此,搜索引擎的质量评测对于整个系统的研制和发展是至关重要的。     那么有哪些指标可以评估搜索引擎的结果质量呢?最广为人知的

我是药老的博客 4485

[CMake] CMake 进阶

代码生成是指使用一些通用的描述文件,可以自动生成源代码,这样可以更高效。

Chris_zhangrx的博客 614

单片机设计具备断电记忆功能的计时器

本文介绍了如何设计一款具备断电记忆功能的计时器,利用单片机和EEPROM存储器实现了计时器值的保存和恢复。当然,在实际的设计中还需要考虑其他因素,如电源管理、时钟精度等,以确保计时器的正常运行和准确性。选择合适的单片机:在设计计时器时,我们需要选择一款具备存储功能的单片机,以便在断电后能够保存计时器的状态。可以优化显示方式,使用更加直观的界面来展示计时器的值;函数中,我们首先从 EEPROM 中读取计时器的初始值,然后在一个无限循环中每秒钟增加计时器的值,并将新的值写入 EEPROM 中。

RlDart的博客 1094

CMake学习入门和进阶详解

CMake 是一个跨平台的构建系统生成工具,用于管理软件构建过程。它通过 CMakeLists.txt 文件描述项目的构建规则,并生成适合不同平台的本地构建文件(如 Makefile、Visual Studio 项目等)。CMake 的核心作用包括跨平台构建、自动化依赖管理、模块化配置以及支持多种构建系统生成器。其关键特点包括声明式语法、缓存机制和集成测试与打包工具。典型的工作流程包括编写 CMakeLists.txt、运行 cmake 生成构建文件,以及调用本地构建工具编译代码。

weixin_43484713的博客 1330

智能车图像处理20-进阶篇12--正入十字补线1

这篇文章主要讲述基本的正入十字补线方法。

taiyuezyh的博客 6941

【RT-DETR涨点改进】全网独家-特征融合改进篇 | AAAI 2025 顶会| 高效涨点,RT-DETR利用CDFA对比度特征聚合模块,适用于目标检查(全网独家创新)

本文提出了一种基于CDFA模块的多级特征融合优化RT-DETR模型,用于解决医学图像分割中的软边界模糊、小目标和共现现象等问题。CDFA模块通过对比度特征聚合、局部特征增强和多级注意力机制,有效提升模型性能。研究提供了三种改进方案(rtdetr-r18/y50/l-CDFA),并在多个医学数据集上验证了其有效性。核心创新包括语义信息解耦、对比驱动特征融合和尺寸感知解码器。实验结果表明,该方法在分割精度和鲁棒性方面达到SOTA水平。

Ai缝合怪、助力小伙伴高效发论文 510

【C/C++进阶】CMake学习笔记

CMake是生成Makefile、Ninja等编译脚本的工具,同时也是强大的项目构建工具。本篇文章记录了学习CMake时的学习笔记,欢迎大家留言探讨,共同进步。

电子德彪西的博客 1690

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hello CMake——CMake进阶

一、CMake基础指令 1、cmake_minimum_required cmake_minimum_required (VERSION 2.8) cmake_minimum_required用于规定cmake程序的最低版本,可选。如果CMakeLists.txt文件中使用了高版本cmake特有的一些命令时,就需要使用cmake_minimum_required对CMake进行版本限制,提醒用户升级到相应版本后再执行cmake。 2、project project(project_name)

天山老妖 2356

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

GNU开发工具——CMake进阶

GNU开发工具——CMake进阶 一、CMake基础指令 1、cmake_minimum_required cmake_minimum_required (VERSION 2.8)cmake_minimum_required用于规定cmake程序的最低版本,可选。如果CMakeLists.txt文件中使用了高版本cmake特有的一些命令时,就需要使用cmake_minimum_required对C...

weixin_33757911的博客 720

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

CMake工程从入门到进阶完整版,可以完成简单的工程创建(完结)

一、Cmake介绍 CMake是一个跨平台的编译工具,使用CMake能够输出各种各样的makefile或者project文件。 先介绍makefile:以一个linux下的例子来说,我要编译如图所示的工程怎么办? 如果不用make命令,则输入: gcc命令输入那么多次,如果我的文件有100个,输入就会烦死。 引入Makefile:只执行make即可生成可执行文件out Makefile的内容为: Makefile生成也很麻烦啊,如果我要是添加一个文件,上图的每行都要修改。于是Makefile有变量解决这

Youngboy007的博客 2931

cmake install普通用法和进阶

前提准备。

ASDQWE09876的博客 623

“深入浅出”系列之C++:CMake进阶

CMake 是一个跨平台的项目构建工具,通俗点说,它会帮你生成 Makefile 或其他编译系统需要的构建文件。在实际开发中,你可能会遇到这样的情况:某些库并没有安装在系统默认的路径(比如/usr/lib或),导致无法找到它们。这时候,就需要告诉 CMake 应该去哪里找这些库。在运行时,CMake 会按照以下顺序依次查找库:1、用户指定的提示路径如果在中使用了HINTS或PATHS参数,这些路径会被优先考虑。2、全局配置的路径。

weixin_65589140的博客 1310

CMake进阶之初识CMake

    平时开发中我们已经习惯了让IDE为我们做好一切,大部分情况下基本上不需要手动去编写项目的make文件,但是在规模较大的项目中,make其实非常重要,甚至可以说会不会make决定了你是否真的了解项目的整体架构并驾驭它。因为自己在Android开发中发现项目中的NDK部分已经抛弃了传统的Android.mk,与时俱进用上了CMake,因此打算静下心来好好学习学习,本文开始对学习CMake的过程...

天山折梅 3975

Clause 开发技能之 CMake 进阶教程(一)| CPP

开源语义理解项目Clause的基本开发技能就是围绕C++的工程展开,使用CMake管理依赖,项目描述。需要掌握CMake,C++。 https://github.com/chatopera/clause Clause使用了很多好的开源的C++的项目的经验,初学C++需要自行研究。以下文章对一些基础知识进行概述。 目录CMake快速开始一键执行基础知识示例程序t1t2t3t4t5t6执行全部示例GUI使用Docker容器实战进阶本系列文章 CMake快速开始 快速开始使用C

Chatopera 1841

CMake系列讲解(进阶篇)2.2 进阶命令 CMake_BUILD_TYPE

cmake_build_type使用 cmake build type使用 cmake_build_type release cmake_build_type_debug cmake_build_type默认值 cmake_build_type为空 cmake_build_type default cmake set(cmake_build_type release) set(cmake_build_type debug) -dcmake_build_type=relwith debug

在下马农的碎碎念 1574

看完这篇文章,我终于搞懂了 CMake,真香!(进阶篇)

看完这篇文章,我终于搞懂了 CMake,真香!(进阶篇)

Henry313的博客 1475
上一篇: cmake 交叉编译防坑指南
下一篇: 利用某通奇葩toolchain编译iperf
cloudybear
博客等级 码龄17年 8粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值