CMake Practice 学习笔记四---使用动静态库

任务:

编写一个程序使用我们上一届构建的共享库

1、准备工作

在/backup/cmake目录建立t4目录

mkdir t4

在t4目录中建立src目录,并编写源文件main.c

cd t4 
mkdir src && cd src
touch main.c

main.c的内容如下:

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

编写工程主文件CMakeLists.txt如下

PROJECT(NEWHELLO)

# 头文件搜索路径
INCLUDE_DIRECTORIES(/usr/include/hello)


ADD_SUBDIRECTORY(src)

编写src/CMakeLists.txt如下

# 生成target二进制可执行文件
ADD_EXECUTABLE(main mian.c)

# 为target链接共享库
# 可以link动态库
TARGET_LINK_LIBRARIES(main hello) # hello 也可以写成libhello.so
# 也可以Link静态库
TARGET_LINK_LIBRARIES(main libhello.a)

2、构建

新建buil目录并进入进行构建

cmake ..
make

这样我们就得到了一个连接到libhello的可执行程序main,位于build/src,目录下,运行main的结果是输出:

Hello World

检查下main的链接情况:

如果链接动态库:

可以清楚的看到main确实链接了共享库libhello,而且是链接的动态库libhello.so.1

如果链接的是静态库:

main链接到libhello.a(这里我也不大懂)

问:这里在工程主文件CMakeLists.txt中指定了头文件的搜索路径,但是没有在src/CMakeLists.txt指定共享库的路径,而是直接进行链接,这样说不过去呀?

前面我们将头文件和共享库安装到系统目录/usr/lib和/usr/include/hello中了。会不会/usr/lib默认是库的存放位置。

还真是哦,不信你看,所以上一步安装的位置要对哦: /lib、/usr/lib、/usr/local/lib区别_XX風的博客-CSDN博客_/usr/lib

问:如果我没有把共享库安装/usr/lib,比如说我安装到了/temp/lib那我需要指定共享库路径吗?

是的哦,在工程主文件CMakeLists.txt中添加:

LINK_DIRECTORIES(/temp/lib)

 参考:

从从C++学习(二六六)LINK_DIRECTORIES_hankern的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值