cmake使用教程(四)调用外部共享库和头文件
文件组织形式:
创建根目录test1,在根目录下创建CMakeLists.txt文件和src文件夹,在src/目录下创建CMakeLists.txt和main.cpp,其中根目录下面的CMakeLists.txt内容为:
# 版本判断
cmake_minimum_required(VERSION 3.0)
# 工程名
project(hello)
# 添加子目录,该目录为子目录,会调用子目录的cmake文件,进行构建库
add_subdirectory(src)
src/main.cpp的主要内容为:
#include <hello.h> //这里通过安装的位置引用,以此达到调用外部库的实验int main()
{helloFunc();return 0;
}
从中可以看到的是包含目录并不是从本地文件来的,而是从系统路径搜索,因此需要配置共享库的路径和链接路径,因此主要的工作在src/CMakeLists.txt的文件中
链接共享库和共享头文件
# 添加包含目录,否则编译不通过
include_directories(/home/ubuntu/work/usr/include/hello)# 包含目录添加后,编译通过但是链接出错,main.cpp:(.text+0x5):对‘helloFunc()’未定义的引用
# 需要link共享库目录,我们还没链接到共享库libhello上
# 添加链接库目录
link_directories(/home/ubuntu/work/usr/lib)# 构建可执行文件
add_executable(main main.cpp)# 包含目录添加后,编译通过但是链接出错,main.cpp:(.text+0x5):对‘helloFunc()’未定义的引用
# 需要link共享库,我们还没链接到共享库libhello上
# 为 target添加共享库
# target_link_libraries(main hello)
# target_link_libraries(main libhello.so)
# 添加静态库
target_link_libraries(main libhello.a)
主要介绍指令和几个关键点:
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
这条指令可以用来向工程添加多个特定的头文件搜索路径,路径之间用空格分割,如果路径
中包含了空格,可以使用双引号将它括起来,默认的行为是追加到当前的头文件搜索路径的
后面,你可以通过两种方式来进行控制搜索路径添加的方式:
1,CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过SET这个cmake 变量为on,可以
将添加的头文件搜索路径放在已有路径的前面。
2,通过AFTER 或者BEFORE参数,也可以控制是追加还是置前。
link_directories([AFTER|BEFORE] directory1 [directory2 ...])
添加非标准的共享库搜索路径,比如,在工程内部同时存在共享库和可执行二进制,在编译时就需要指定一下这些共享库的路径。这个例子中我们用到这个指令。因为创建的共享库没有在系统目录 中,不指定他是找不大的, 因此可以通过该命令进行指定即可
上面执行结果后:
cmake使用教程(四)调用外部共享库和头文件相关推荐
- 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )
文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...
- linux编译静态库的头文件,条件编译,头文件,静态库,共享库与多文件编程
条件编译 条件编译即满足某些条件的时候编译某部分代码,常用于开发多个版本的程序,当满足条件A时,编译出免费版本的软件,当满足条件B时,编译除vip版本的软件,可以提高代码的复用率.条件编译使用&quo ...
- linux 头文件卫士,条件编译,头文件,静态库,共享库与多文件编程
原标题:条件编译,头文件,静态库,共享库与多文件编程 本文转载自嵌入式Linux中文站条件编译 条件编译即满足某些条件的时候编译某部分代码,常用于开发多个版本的程序,当满足条件A时,编译出免费版本的软 ...
- Linux下开源库的使用(共享库文件头文件配置全局搜索)(WSL)
关键词 g++; vscode; c++; pkg-config; include; lib; linux; .pc; tasks.json; launch.json; WSL 前言 需求及手动解决方 ...
- QtCreator里添加外部第三库、头文件路径的方法(.pro文件)
一.前言 在项目开发过程中,经常需要用到第三方库,需要在QtCreator工程里指定第三库的路径.头文件路径.引用的库名称等等:并且可能还需要编写通用工程针对不同的编译器类型,位数选择不同的库,针对不 ...
- 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )
文章目录 一.导入 Oboe 库 二.使用预构建的二进制库和头文件 三.编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Starte ...
- linux安装的库文件,linux – 安装包库和头文件在哪里?
在Ubuntu中下载并安装软件包后,如何查看库和头文件的写入位置?我相信这与包的.pc文件有关,但我不知道如何找到该文件. 例如,我已经下载了PCL(Point Cloud Library)软件包,然 ...
- CCS中给工程加入C66x CSL库和头文件
CCS中给工程加入C66x CSL库和头文件 下载CSL头文件和库. 下载后解压缩进行安装,我安装的位置为:C:\ti\C6xCSL,装好后"/include/"文件夹下面是CSL ...
- GameMakerStudio2调用外部dll库
项目上遇到的问题,记录下来 windows平台下GMS2调用外部动态链接库(DLL) 1.制作DLL文件(自行根据功能制作:C#制作DLL) 制作Dll需注意几点: 创建项目工程时需选择类库 由于要将 ...
最新文章
- 实现滑动菜单(富文本版本)
- python习题:修改文件里的内容
- 短信网址价值不大不应被热炒
- .net html5页面缓存,详解HTML5中的manifest缓存使用
- Another app is currently holding the yum lock; waiting for it to exit...
- 复合选择器-并集选择器(HTML、CSS)
- 杭州恒生数米基金网招聘1-3年本科.NET软件工程师
- 详解SQL Server Profiler分析死锁几大步骤
- HTML5学习总结(1)——HTML5基础知识
- 首旅如家仍计划全年开店800-1000家;万豪旗下双品牌酒店“帆船”于宁夏银川启幕 | 美通企业日报...
- 五道口男子计算机职业技术学院,哈哈!双鸭山大学、五道口男子职业技术学校…盘点高校那些“天雷滚滚”的绰号...
- 【多媒体技术】多媒体技术期末复习题
- 在MacOSX的Vmare Fusion中添加虚拟软驱和制作虚拟软盘
- TLSR8232-Telink蓝牙SoC之03程序下载和运行调试
- 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-28期...
- 【Get深一度】香农定理(Shannon Theory)
- 截图工具当前未在计算机上运行 请重启_一个顶十个的工具箱软件,这才是真正的装机必备。...
- 中国人体工程学椅子行业市场供需与战略研究报告
- 使用ES6,Pt更好JavaScript。 III:酷收藏和闪烁的弦
- 基于PHP+MySQL的大学生交友社交网站