Linux下CMake简明教程(七)对库进行链接
代码在git
既然我们已经生成了库,那么就进行链接测试下。重新建一个工程目录,然后把上节生成的库拷贝过来,然后在在工程目录下新建src目录和bin目录,在src目录下添加一个main.c,整体结构如下,
.
├── bin
├── build
├── CMakeLists.txt
├── src
│ └── main.c
└── testFunc├── inc│ └── testFunc.h└── lib├── libtestFunc.a└── libtestFunc.so
main.c内容如下,
#include <stdio.h>#include "testFunc.h"int main(void)
{func(100);return 0;
}
工程目录下的CMakeLists.txt内容如下,
cmake_minimum_required (VERSION 3.5)project (demo)set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/main.c)# find testFunc.h
include_directories (${PROJECT_SOURCE_DIR}/testFunc/inc)find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)add_executable (main ${SRC_LIST})target_link_libraries (main ${TESTFUNC_LIB})
这里出现2个新的命令,
- find_library: 在指定目录下查找指定库,并把库的绝对路径存放到变量里,其第一个参数是变量名称,第二个参数是库名称,第三个参数是HINTS,第4个参数是路径,其它用法可以参考cmake文档
- target_link_libraries: 把目标文件与库文件进行链接
使用find_library的好处是在执行cmake …时就会去查找库是否存在,这样可以提前发现错误,不用等到链接时。
cd到build目录下,然后运行cmake … && make,最后进入到bin目录下查看,发现main已经生成,运行之,
运行成功!
ps:在lib目录下有testFunc的静态库和动态库,find_library(TESTFUNC_LIB testFunc …默认是查找动态库,如果想直接指定使用动态库还是静态库,可以写成find_library(TESTFUNC_LIB libtestFunc.so …或者find_library(TESTFUNC_LIB libtestFunc.a …
ps: 查看elf文件使用了哪些库,可以使用readelf -d ./xx来查看
之前本节教程使用的是库查找方法是link_directories,但是很多读者反映运行时有问题,本人去官方文档上查了下,发现不建议使用了,推荐使用find_library或者find_package
Linux下CMake简明教程(七)对库进行链接相关推荐
- Linux下CMake简明教程(六)动态库和静态库的编译控制
代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...
- Linux下CMake简明教程(二)同一目录下多个源文件
代码在git 接下来进入稍微复杂的例子:在同一个目录下有多个源文件.在之前的目录下添加2个文件,testFunc.c和testFunc.h.添加完后整体文件结构如下, (base) ledi@ledi ...
- Linux下CMake简明教程(一)简单入门
代码链接 CMake是开源.跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件 ...
- Linux下CMake简明教程(九) 添加控制选项
代码在git 有时希望在编译代码时只编译一些指定的源码,可以使用cmake的option命令,主要遇到的情况分为2种: 本来要生成多个bin或库文件,现在只想生成部分指定的bin或库文件 对于同一个b ...
- Linux下CMake简明教程(10) 定义宏来控制打印的信息
代码在git 假设我们有个main.c,其内容如下 #include <stdio.h>int main(void) {#ifdef WWW1printf("hello worl ...
- Linux下CMake简明教程(八) 添加编译选项
代码在git 有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,就可以使用add_compile_options来进行操作. 这里以一个简单程序来做演示,main.cpp如下 # ...
- Linux下CMake简明教程(五)正规一点的组织结构
代码在git 正规一点来说,一般会把源文件放到src目录下,把头文件放入到include文件下,生成的对象文件放入到build目录下,最终输出的elf文件会放到bin目录下,这样整个结构更加清晰.让我 ...
- Linux下CMake简明教程(四)不同目录下多个源文件
代码在git 一般来说,当程序文件比较多时,我们会进行分类管理,把代码根据功能放在不同的目录下,这样方便查找.那么这种情况下如何编写CMakeLists.txt呢? 我们把之前的源文件整理一下(新建2 ...
- Linux下CMake简明教程(三)同一目录下多个源文件
如果在同一目录下有多个源文件,那么只要在add_executable里把所有源文件都添加进去就可以了.但是如果有一百个源文件,再这样做就有点坑了,无法体现cmake的优越性,cmake提供了一个命令可 ...
最新文章
- 5. 编程规范和编程安全指南--JavaScript
- Oracle视图添加约束,Oracle的约束视图
- SQL Server 2005的服务器角色(public)的问题
- scratch跳一跳游戏脚本_涂鸦骑士3D版强势屠榜,腾讯跳一跳“宝刀未老” | 休闲新游周报...
- c语言程序运行结果怎么看,帮忙看看我这个C语言程序有什么错误,运行结果不正确...
- mysql查询1971年以前_mysql查询昨天 一周前 一月前 一年前的数据
- limit where group by having select
- Atitit 数据库view视图使用推荐规范与最佳实践与方法
- 乌鲁木齐市谷歌高清卫星地图下载
- 禅道、码云、coding、redmine、jira、teambition几大敏捷开发项目管理系统试用对比体验
- co作为前缀的意思_注定孤独的前缀|英汉比较教学法·语音思维No.17
- 6款沙发背景墙装饰画 总有一幅你喜欢的
- 使用Markdown如何修改图片大小
- 云虚拟主机worldpress安装教程
- 数据分析必看的oCPM/oCPC核心知识点
- steam进社区显示服务器错误,Steam错误代码-118怎么办 社区打不开解决方法
- MyBatis-plus分页查询整理
- 论坛介绍 | COSCon'22 物联网(IoT)
- 常见系统问题及其解决方法
- 资源采集网php源码,ThinkPHP5.1 自动采集资源网 源码开源