当前位置: 首页 > news >正文

cmake 入门二 库的编译,安装与使用

工程描述

1,建立一个静态库和动态库,提供HelloFunc 函数供其他程序编程使用,HelloFunc
向终端输出Hello World字符串。
2,安装头文件与共享库。

1 库的工程结构

在这里插入图片描述

1.1 工程目录下的CMakeLists.txt

PROJECT(HELLOLIB)
ADD_SUBDIRECTORY(lib)

1.2 lib 目录下的CMakeLists.txt

SET(LIBHELLO_SRC hello.c)# 注意生成动态库和静态库的名称要做区分,hello作为target不能被重命名
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})# 将静态库的名称重新命名为hello,达到生成 libhello.so  libhello.a的效果
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")
# 打印重命名的静态库的名称
# GET_TARGET_PROPERTY(OUTPUT_VALUE hello_static OUTPUT_NAME)
# MESSAGE(STATUS "This is the hello_static OUTPUT_NAME:" ${OUTPUT_VALUE})# cmake在构建新的target时,会清理掉同名的旧的target, 此处设置防止生成的target被清理掉
SET_TARGET_PROPERTIES(hello PROPERTIES CLEAN_DIRECT_OUTPUT 1)
SET_TARGET_PROPERTIES(hello_static PROPERTIES CLEAN_DIRECT_OUTPUT 1)# 设置动态库版本号
SET_TARGET_PROPERTIES(hello PROPERTIES VERSION 1.2 SOVERSION 1)# 安装静态库、动态库、头文件
INSTALL(TARGETS hello hello_staticLIBRARY DESTINATION libARCHIVE DESTINATION lib)
INSTALL(FILES hello.h DESTINATION include)

1.3 编译目录下执行cmake

在这里插入图片描述
编译完成后的build目录结构(注意编译之前build是空目录,编译完成后生成的目标文件和中间文件都放置在bulid目录下)
在这里插入图片描述

1.4 生成的安装目录结构

在这里插入图片描述

2 主调程序的工程结构

在这里插入图片描述
main.c

#include <hello.h>
int main()
{HelloFunc();return 0;
}

2.1 工程目录下的CMakeLists.txt

cmake_minimum_required(VERSION 3.16)PROJECT(NEWHELLO)
ADD_SUBDIRECTORY(src)

2.2 src 目录下的CMakeLists.txt

ADD_EXECUTABLE(main main.c)# 添加依赖库的头文件路径
INCLUDE_DIRECTORIES(/tmp/t3/usr/include)# 添加依赖库的路径,这个地方添加依赖库的搜索路径,在执行make是提示找不到,不解。。
# 最后没办法做了一个软链接到/usr/lib64
#LINK_DIRECTORIES(/tmp/t3/usr/lib)# 添加搜索库的名称
TARGET_LINK_LIBRARIES(main hello)

2.3 编译并运行

在这里插入图片描述

http://www.lryc.cn/news/19257.html

相关文章:

  • Python中实现将内容进行base64编码与解码
  • 集合TreeSet的使用-java
  • Mybatis-plus 分页集成以及基本使用总结 入门和案例 注解连表查询分页案例等
  • 5个设计师常用素材库
  • PHP/7.2.11 缺少 apache2/logs/httpd.pid 文件
  • 【centos7下部署mongodb】
  • pycharm首次使用爬虫框架scrapy遇到的问题和解决方法(二)
  • pyflink学习笔记(二):table_apisql
  • 嵌入式 STM32 实现STemwin移植+修改其配置文件,驱动LCD显示文本 (含源码,建议收藏)
  • [计算机网络(第八版)]第一章 概述(学习笔记)
  • AI绘图:常用镜头和视角
  • TCP四次挥手
  • Tomcat源码分析-类加载器
  • MySQL进阶篇之视图/存储过程/触发器
  • 【一看就会】实现仿京东移动端页面滚动条布局
  • 网易的“草长莺飞二月天”:增长稳健,加码研发,逐浪AI
  • NPC内网穿透教程-入门
  • 【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库
  • Spring源码分析:创建 BeanDefinition 流程
  • Linux 练习一(思维导图 + 练习过程)
  • 高德地图基础教程超详细版
  • 基于A7核开发板的串口实现控制LED亮灭
  • HyperGBM用Adversarial Validation解决数据漂移问题
  • 关基系统三月重保安全监测怎么做?ScanV提供纯干货!
  • RK3588关键电路 PCB Layout设计指南
  • 二分边界详细总结
  • STM32---备份寄存器BKP和 FLASH学习使用
  • Python-生成元组和字典
  • I.MX6ULL内核开发10:设备树
  • 【大数据】记一次hadoop集群missing block问题排查和数据恢复