使用CMakeLists.txt创建一个动态库工程Demo给main程序使用

CMAKE-实战1-windows(调用动态库和静态库) cmake学习经历-windows实战之静态库与动态库调用 阅读详情

主要需求是把 hello 程序编译动态库,再 main 程序或者第三方程序执行的时候动态加载。

工程目录如下:

$ ls -al *
-rw-r--r-- 1 neuti 197609 352 Oct 20 19:30 CMakeLists.txt

include:
total 1
drwxr-xr-x 1 neuti 197609  0 Oct 20 19:30 ./
drwxr-xr-x 1 neuti 197609  0 Oct 20 19:30 ../
-rw-r--r-- 1 neuti 197609 93 Oct 20 19:30 hello.h

src:
total 2
drwxr-xr-x 1 neuti 197609   0 Oct 20 19:30 ./
drwxr-xr-x 1 neuti 197609   0 Oct 20 19:30 ../
-rw-r--r-- 1 neuti 197609 112 Oct 20 19:30 hello.c
-rw-r--r-- 1 neuti 197609 103 Oct 20 19:30 main.c

include 目录是头文件目录,src 是源文件目录。

CMakeLists.txt 文件内容如下:

cmake_minimum_required(VERSION 3.10)

project(main)

# Use C11
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True)

# Add include directories
include_directories(include)

# Add shared lib files
add_library(hello SHARED src/hello.c)

# Add source files
add_executable(main src/main.c)

# Build target
target_link_libraries(main hello)

main 程序中调用 hello 动态库中的 print_hello_world接口:

#include <stdio.h>
#include "hello.h"

int main()
{
    print_hello_world();
    return 0;
}

hello.c 内容:

#include <stdio.h>
#include "hello.h"

void print_hello_world(void)
{
    printf("Hello, world!\n");
}

hello.h 内容:

#ifndef HELLO_H
#define HELLO_H

void print_hello_world(void);

#endif /* HELLO_H */

编译工程:

cmake .
make

执行程序:

./main
ROS1手动创建Package:从零解析package.xml与CMakeLists.txt 在机器人开发中,ROS Package是模块化构建的基础单元,其本质是一套由元数据声明(package.xml)和构建逻辑(CMakeLists.txt)共同定义的标准化契约。理解其设计原理,需掌握依赖分类机制——build_depend影响编译期头文件与链接检查,exec_depend决定运行时动态库加载;同时需明确catkin_package()宏如何导出头文件路径与依赖传递,以及find_package()如何触发CMake宏链完成路径注入。这些机制直接关系到std_msgs/String.h能否被正 阅读详情

相关推荐

wxWidgets 3.2.1编译踩坑实录:从源码到第一个窗口,我的CMakeLists.txt配置全解析

本文详细记录了在Windows平台下使用MinGW和CMake构建wxWidgets 3.2.1的完整过程,包括环境准备、源码编译、CMake项目配置及常见问题解决方案。特别针对开发环境搭建中的关键参数和路径问题提供了实用建议,帮助开发者快速实现从源码到第一个窗口程序的完整流程。

痴迷无限好 625

Typora“使用”教程

Typora“使用”教程

Edward2022的博客 4773

CLion与CMake实战:C语言静态库与动态库的创建与调用指南

在C语言开发中,模块化是提升代码复用性和可维护性的核心思想。其原理是将复杂系统拆分为功能独立的模块,通过封装隐藏实现细节,仅暴露清晰接口。这一实践的技术价值在于显著提升开发效率、降低维护成本并促进团队协作。应用场景广泛,从嵌入式系统到大型桌面软件,模块化都是构建可扩展架构的基础。而库(Library)正是模块化思想的物理实现,它将编译好的模块代码打包,供其他程序直接调用。本文聚焦于使用CLion IDE和CMake构建系统,详细演示如何将C代码模块打包为静态库(.a/.lib)与动态库(.so/.dll),

weixin_30263073的博客 358

使用CMakelist编译C++项目--demo演示

CMakelist编写demo

qq_41920323的博客 1091

CMake学习问题

CMake学习过程中遇到的问题

Phil2697118641的博客 151

CMake学习总结

CMake学习后总结笔记

Phil2697118641的博客 159

CMake使用方法以及CMakeLists.txt 学习总结(1)

在一个目录下有多个cpp文件,和头文件main.cpphead.h。

deer07的博客 3224

wsl2上运行带有Isaac Gym的程序报错: GPU Pipeline: disabled

显示GPU Pipeline:disabled,查找相关文档发现是WSL2目前不支持Isaac Gym,时,想要在wsl2上运行,最后报错如下。

2303_78660611的博客 956

CMakeLists.txt简单demo

这里需要主要一个-O3 -DNDEBUG, 我们知道-O3是编译选项,但是-DNDEBUG是宏定义,为啥都扯到FLAGS里面了,其实是我们用了set(CMAKE_BUILD_TYPE “Release”), cmake直接把“-O3 -DNDEBUG”这个字符串打包给了target_compile_options, 理论也不该这么写,但是-O3和-DNDEBUG一般同时出现,所以软件为了方便打包放一起了。这样做的目的可能是为了确保在链接阶段也使用相同的优化选项和宏定义,以保持整个编译过程的一致性。

feng__shuai的博客 1072

EDA与机器学习融合:智能优化芯片设计流程的工程实践

机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文

weixin_30411239的博客 684

XC7Z010-1CLG400C开发板ADC引脚配置全攻略(附完整引脚列表)

本文详细解析了XC7Z010-1CLG400C开发板的ADC引脚配置方法,涵盖XADC模块基础、CLG400封装的引脚布局、硬件设计规范及Vivado工程配置实战。特别提供了完整的引脚列表和性能优化技巧,帮助开发者高效实现模拟信号采集,适用于Zynq-7000系列开发。

weixin_29188043的博客 465

开源项目学习(6)---- CMake demo 分析

cmake

小猪佩奇的博客 431

二、声明式 Pipeline 语法

选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值,例如:parameters { choice(name: ‘CHOICES’, choices: [‘one’, ‘two’, ‘three’], description: ‘’) },表示定义一个名为 CHOICES 的变量,可选的值为 one、two、three;默认情况下,如果定义了某个 stage 的 agent,在进入该 stage 的 agent 后,该 stage 的 when条件才会被评估,但是可以通过一些选项更改此选项。

Cyan_Jiang的博客 1220

C++工程的CMakeLists.txt文件编写

C++工程的CMakeLists.txt文件的demo编写。 CMakeLists的介绍和简单用法

hanxiaoyong_的博客 2745

macOS 27下PlayCover“没有权限打开”的完整修复指南

macOS系统通过Gatekeeper、TCC(透明、同意与控制)和安全启动等机制,对第三方应用进行层层校验,以防范恶意代码。这些机制会检查应用的隔离属性、签名状态以及所需系统权限,当任一环节不满足时,就会出现“没有权限打开”的提示。对于开发者工具或未上架App Store的开源软件,这类拦截尤为常见。尤其在macOS 27上,系统进一步收紧了绕过策略,导致PlayCover等工具无法正常启动。本文以PlayCover为例,详细解析权限链路上的三道关卡,并给出清除隔离属性、调整SIP状态、重置TCC记录等完

weixin_32612263的博客 727

【ComfyUI】SD1.5 + ControlNet 边缘检测融合动漫转真人

本文介绍了一个基于ComfyUI的动漫转真人图像生成工作流,通过多模型协同实现高质量的二次元图像转换。该工作流集成了Canny线稿预处理、ControlNet结构控制、VAE编码解码和人脸精细化处理等核心环节,采用majicmixRealistic_v7作为主模型,配合yolov8、SAM等辅助模型。整个流程包含11个标准化步骤,从图像输入、预处理到最终超分输出,通过ControlNet引导和CLIP语义控制确保生成图像的写实感和结构准确性,特别针对人脸区域进行专业优化,最终可输出高分辨率写实人像。

Mr数据杨 1120

一个简单的CMake工程示例

在工程目录下,构建目录src,include,lib,bin。在src目录下存放源代码文件,include目录下存放头文件,lib目录用于存放生成的库(动态库或者静态库),bin目录存放最终生成的可执行文件。 src目录存放main.cpp和lib_demo.cpp的源文件: // main.cpp #include <iostream> #include "main.h" #include "lib_demo.h" using namespace std; int main() {

qq_18626193的博客 383

【ArcGIS】07 ArcHydroTools对COM组件的调用返回了错误

在用Arc Hydro Tools提取流域时,在DEM Reconditioning时可能会遇到这个问题: 经过摸索,发现了问题产生的原因: 结果文件保存在了有中文的路径中。 解决的办法: 首先,把ArcGIS切换成英文版 搜索ArcGlS Administrator,以管理员方式打开 点击高级,选择语言为English 其次,新建mxd文档 删除原来的mxd文档,新建mxd文档,放置原来的图层文件。如果不这样做,最后一步的Map Name还会是“图层”这两个汉字。 最后,设置Arc Hydro T

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 4918

一个简单的CMake工程示例以及运行过程

在工程目录下,构建目录src,include,lib,bin。在src目录下存放源代码文件,include目录下存放头文件,lib目录用于存放生成的库(动态库或者静态库),bin目录存放最终生成的可执行文件。 src目录存放main.cpp和lib_demo.cpp的源文件: main.cpp #include &lt;iostream&gt; #include "main.h" #inc...

weixin_41245919的博客 1974

1.FPGA开发软件安装——Vivado

目前主流的FPGA公司包括xilinx和Intel(原altera公司),其开发软件分别为vivado和quartusii。我们这里以目前国内应用较多的vivado为例进行安装讲解。 1、首先是去官网下载 Vivado 安装包:https://www.xilinx.com/support/download.html。下载这个最大的、支持所有的 OS 如 Windows/Linux 的安装包。 2、下载完之后,就进行解压。(最好在解压和安装之前都关闭所有的杀毒软件以防万一)。紧接着,解压完之后...

FPGA/MATLAB学习教程/源码/项目合作开发 8254

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

cmake 构建linux工程学习记录

以前在Linux上通过一套格式化的Makefile来构建Linux工程,生成库和可执行文件。 今天看了一下cmake这种跨平台构建方式来构建Linux下工程一样方便,可值钱格式化的Makefile没有什么不一样。下面进行展示: 我在虚拟机中的工作目录如图所示: 本文首先在prj_lib工程中生成动态库,然后再在prj_linux中生成目标程序时链接该动态库,这样比较符合日常实际开发。 放心这里的实例不会比别人从单文件到多文件再到链接库来得困难。 生成动态库: 进入到prj_lib的目录下,有3个文件夹和一

qq_41540355的博客 422

IMSL CNL 7.0.0 (x86-64)Crack

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

CMake 3.28 实战:5种常见项目结构 CMakeLists.txt 模板与性能对比

本文基于CMake 3.28最新特性,详细解析了5种常见项目结构的CMakeLists.txt模板,包括单文件项目、多目录模块化结构、静态库依赖方案、多目标混合构建和跨平台项目模板。通过量化测试对比不同方案的构建性能,为C++开发者提供实用的优化建议和性能数据参考。

weixin_30660027的博客 323

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SLAM算法与工程实践——SLAM基本库的安装与使用(2):OpenCV库

opencv库

YangtseJin的博客 1553

Linux下CMake简明教程(七)对库进行链接

代码在git 既然我们已经生成了库,那么就进行链接测试下。重新建一个工程目录,然后把上节生成的库拷贝过来,然后在在工程目录下新建src目录和bin目录,在src目录下添加一个main.c,整体结构如下, . ├── bin ├── build ├── CMakeLists.txt ├── src │ └── main.c └── testFunc ├── inc │ └── testFunc.h └── lib ├── libtestFunc.a

luoganttcc的博客 1325

使用cmake+gcc 以库的形式编译多目录下的文件

cmake+gcc以库的形式编译多目录文件

yaq_30401的博客 3030

cmake(4):在多层目录结构下编译

1. 说明 本文以一个简单的示例说明如何在多层目录结构下如何构建目标文件。 1.1 项目结构 在工程目录下包含三个目录和一个根CMakeLists.txt main:main.cpp, CMakeLists.txt math:add.h/cpp, CMakeLists.txt utility:utils.h/cpp, CMakeLists.txt CMakeLists.txt 如下图所示: 1.2 示例说明 定义各个功能函数及子目录下的CMakeLists.txt main:编译成一个可执行文件d

翔底的博客 1万+
上一篇: [RK-Linux] 解决RK3399 M.2 NVMe SSD根文件系统分区容量无法扩展到最大问题
下一篇: 基于STC89C52RC的温湿度显示与按键可调的时钟显示
嵌入式逍遥
嵌入式逍遥 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄9年 7万+粉丝 237原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值