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

Ansys HFSS 中的同轴电缆仿真

准确模拟它们的行为对于确保 RF 系统的最佳性能至关重要。在本博客中,我们将介绍在 HFSS 中设置同轴电缆仿真并绘制插入损耗、回波损耗和电场分布的过程。将波端口分配给同轴线的两端以激励模型,并定义了从 1 GHz 到 20 GHz 的频率扫描以评估其宽带性能。铜分配给内部导体,铝分配给外部导体。介电区域使用 PTFE 定义,其相对介电常数为 2.1,损耗角正切为 0.00022。仿真完成后,结果用于绘制整个频率范围内的回波损耗和插入损耗。此外,电介质内的电场分布也被绘制和动画化。

jkh920184196的博客 1910

RTL8306MB交换芯片驱动开发避坑指南:从硬件接线到SDK移植全流程解析

本文详细解析了RTL8306MB交换芯片驱动开发的全流程,重点从硬件接线、SDK移植到实战调试。针对RMII模式下的常见问题,特别是TXEN与RXDV信号交叉连接等关键“坑点”,提供了清晰的排查指南和解决方案,旨在帮助嵌入式工程师高效完成网络设备开发。

280

CMake进阶教程

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

支离Chilly的博客 1868

Vivado Combinatorial Loop Alert问题 [DRC LUTLP-1]

Vvado综合和布局布线都通过了但是无法生成bit文件,提示Combinatorial Loop Alert,错误如下图。在RTL图中可以看到LUT的输出连接到了输入上,这个就是。在代码中我并未找到导致这种情况发生的地方,如果遇到类似的问题先检查自己的代码是不是存在组合逻辑连接出现了问题,如果没问题再考虑通过设置去解决问题。

伊丽莎白的学习之路 6032

CMake学习进阶流程

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

qq_42902201的博客 1701

HMMER实战:从零部署到序列分析

本文详细介绍了HMMER工具的安装与使用,从源码编译到环境配置,再到核心工具hmmbuild、hmmsearch等的实战应用。通过球蛋白序列分析案例,展示了HMMER在生物信息学中的强大功能,帮助读者快速掌握序列分析技巧。

weixin_42529366的博客 254

Playwright自动化测试实战:攻克日历时间控件三大策略与Java实现

在Web自动化测试领域,元素定位与交互模拟是核心技术基础,其原理在于通过程序精确识别并操作页面中的DOM元素,以模拟真实用户行为。这项技术的核心价值在于提升测试效率、确保交互逻辑的覆盖度与可靠性,广泛应用于电商、金融、OA等系统的功能验证。日历时间控件作为典型的复杂交互组件,常涉及动态弹出层、多级导航与状态同步,是自动化测试中的常见难点。本文聚焦于使用Playwright工具,针对此类控件深入剖析了三种核心解决策略:从最高效的直接赋值、到全面模拟用户交互的主流方法,再到利用组件特性的混合定位方案,并结合Ja

weixin_28835551的博客 312

[CMake] CMake 进阶

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

Chris_zhangrx的博客 614

PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算

文章目录test_SINS_GPS_153源码poserrsetkfinitgabiaskfupdate流程 test_SINS_GPS_153源码 poserrset function poserr = poserrset(dpos0, dlon, dhgt) % position errors dpos=[dlat;dlon;dhgt] setting. % % Prototype: poserr = poserrset(dpos0) % Input: dpos0=[dlat; dlon; dhgt],

十八与她的博客 2161

CMake学习入门和进阶详解

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

weixin_43484713的博客 1330

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3788

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

电子德彪西的博客 1690

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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、付费专栏及课程。

余额充值