CMakeLists.txt语法(四)

一.简介

使用外部动态库或者静态库,生成可执行文件。

二.外部库

1.外部库头文件

testlib.h存放目录:/usr/local/testLIB

c 复制代码
#ifndef TEST_LIB_H
#define TEST_LIB_H

#include<stdio.h>
void printFunc();

#endif

2.外部库源文件

testlib.c

c 复制代码
#include "testlib.h"

void printFunc()
{
	printf("this is printFunc test\n");
}

3.外部库文件

生成库文件的方法,请参考本专栏文章《CMakeLists.txt语法(三)》。

动态库文件testlib.so和静态库文件testlib.a存放目录:/usr/local/testLIB/lib

三.构建工程

1.工程目录下的CMakeLists.txt

c 复制代码
PROJECT(uselib)
ADD_SUBDIRECTORY(src bin)

2.子目录下的文件

(1)CMakeLists.txt

  • 调用动态库
c 复制代码
INCLUDE_DIRECTORIES(/usr/local/testLIB)
LINK_DIRECTORIES(/usr/local/testLIB/lib)
ADD_EXECUTABLE(uselib main.c)
TARGET_LINK_LIBRARIES(uselib libtest.so)
  • 调用静态库
c 复制代码
INCLUDE_DIRECTORIES(/usr/local/testLIB)
LINK_DIRECTORIES(/usr/local/testLIB/lib)
ADD_EXECUTABLE(uselib main.c)
TARGET_LINK_LIBRARIES(uselib libtest.a)

(2)main.c

c 复制代码
#include "testlib.h"

void main()
{
	printFunc();
	printf("this is use library demo\n");
}

3.外部编译

进入build目录后,执行

c 复制代码
cmake ..
make

4.运行编译后的可执行文件

5.查看可执行文件依赖的动态库

c 复制代码
ldd ./uselib

四.语法

1.INCLUDE_DIRECTORIES

  • 语法:INCLUDE_DIRECTORIES( dir1 dir2 ...)
  • 功能:向工程添加多个头文件搜索路径,路径之间用空格分开
  • 语法:LINK_DIRECTORIES(directory1 directory2 ...)
  • 功能:添加非标准的共享库搜索路径
  • 语法:TARGET_LINK_LIBRARIES(target library1 library2...)
  • 功能:为target添加需要链接的共享库
相关推荐
brave and determined2 天前
传感器学习(day06):PM2.5传感器技术全解析
嵌入式硬件·嵌入式开发·嵌入式应用·嵌入式设计·pm2.5·微量振荡天平·beta射线法
云雾J视界4 天前
告别手动寄存器编程:STM32-RS 生态如何重构嵌入式开发效率
rust·svd·嵌入式开发·寄存器·工具链·可编译·社区驱动
MounRiver_Studio5 天前
RISC-V IDE MRS2使用笔记(六):自定义代码格式化
ide·risc-v·嵌入式开发
Tronlong创龙12 天前
基于 DR1M90 的 Linux-RT 内核开发:从编译配置到 GPIO / 按键应用实现(2)
开发板·嵌入式开发·硬件开发·工业控制
龙智DevSecOps解决方案13 天前
龙智解读:AI时代的嵌入式开发挑战以及Perforce QAC、Tessy等工具链的落地应用
嵌入式开发·汽车电子·汽车软件开发·功能安全规范
阿捏利13 天前
详解ELF文件(三)程序头表
c/c++·linux编程·elf文件
Nerd Nirvana16 天前
VSCode配置及问题解决一览
ide·vscode·编辑器·嵌入式开发·配置管理·vscode-server
cooldream200916 天前
基于 RISC-V VisionFive 的桌面数字时钟项目实战
嵌入式硬件·risc-v·嵌入式开发
Tronlong创龙16 天前
1分钟速览,安路ARM + FPGA和进口相比,有何关键改进?
开发板·嵌入式开发·硬件开发·工业控制
切糕师学AI16 天前
ARM中的汇编指令:MRS和MSR
汇编·嵌入式开发