文件组织形式:

创建根目录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使用教程(四)调用外部共享库和头文件相关推荐

  1. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )

    文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...

  2. linux编译静态库的头文件,条件编译,头文件,静态库,共享库与多文件编程

    条件编译 条件编译即满足某些条件的时候编译某部分代码,常用于开发多个版本的程序,当满足条件A时,编译出免费版本的软件,当满足条件B时,编译除vip版本的软件,可以提高代码的复用率.条件编译使用&quo ...

  3. linux 头文件卫士,条件编译,头文件,静态库,共享库与多文件编程

    原标题:条件编译,头文件,静态库,共享库与多文件编程 本文转载自嵌入式Linux中文站条件编译 条件编译即满足某些条件的时候编译某部分代码,常用于开发多个版本的程序,当满足条件A时,编译出免费版本的软 ...

  4. Linux下开源库的使用(共享库文件头文件配置全局搜索)(WSL)

    关键词 g++; vscode; c++; pkg-config; include; lib; linux; .pc; tasks.json; launch.json; WSL 前言 需求及手动解决方 ...

  5. QtCreator里添加外部第三库、头文件路径的方法(.pro文件)

    一.前言 在项目开发过程中,经常需要用到第三方库,需要在QtCreator工程里指定第三库的路径.头文件路径.引用的库名称等等:并且可能还需要编写通用工程针对不同的编译器类型,位数选择不同的库,针对不 ...

  6. 【Android 高性能音频】Oboe 开发流程 ( 导入 Oboe 库 | 使用预构建的二进制库和头文件 | 编译 Oboe 源码 )

    文章目录 一.导入 Oboe 库 二.使用预构建的二进制库和头文件 三.编译 Oboe 源代码 Oboe GitHub 主页 : GitHub/Oboe ① 简单使用 : Getting Starte ...

  7. linux安装的库文件,linux – 安装包库和头文件在哪里?

    在Ubuntu中下载并安装软件包后,如何查看库和头文件的写入位置?我相信这与包的.pc文件有关,但我不知道如何找到该文件. 例如,我已经下载了PCL(Point Cloud Library)软件包,然 ...

  8. CCS中给工程加入C66x CSL库和头文件

    CCS中给工程加入C66x CSL库和头文件 下载CSL头文件和库. 下载后解压缩进行安装,我安装的位置为:C:\ti\C6xCSL,装好后"/include/"文件夹下面是CSL ...

  9. GameMakerStudio2调用外部dll库

    项目上遇到的问题,记录下来 windows平台下GMS2调用外部动态链接库(DLL) 1.制作DLL文件(自行根据功能制作:C#制作DLL) 制作Dll需注意几点: 创建项目工程时需选择类库 由于要将 ...

最新文章

  1. 实现滑动菜单(富文本版本)
  2. python习题:修改文件里的内容
  3. 短信网址价值不大不应被热炒
  4. .net html5页面缓存,详解HTML5中的manifest缓存使用
  5. Another app is currently holding the yum lock; waiting for it to exit...
  6. 复合选择器-并集选择器(HTML、CSS)
  7. 杭州恒生数米基金网招聘1-3年本科.NET软件工程师
  8. 详解SQL Server Profiler分析死锁几大步骤
  9. HTML5学习总结(1)——HTML5基础知识
  10. 首旅如家仍计划全年开店800-1000家;万豪旗下双品牌酒店“帆船”于宁夏银川启幕 | 美通企业日报...
  11. 五道口男子计算机职业技术学院,哈哈!双鸭山大学、五道口男子职业技术学校…盘点高校那些“天雷滚滚”的绰号...
  12. 【多媒体技术】多媒体技术期末复习题
  13. 在MacOSX的Vmare Fusion中添加虚拟软驱和制作虚拟软盘
  14. TLSR8232-Telink蓝牙SoC之03程序下载和运行调试
  15. 好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-28期...
  16. 【Get深一度】香农定理(Shannon Theory)
  17. 截图工具当前未在计算机上运行 请重启_一个顶十个的工具箱软件,这才是真正的装机必备。...
  18. 中国人体工程学椅子行业市场供需与战略研究报告
  19. 使用ES6,Pt更好JavaScript。 III:酷收藏和闪烁的弦
  20. 基于PHP+MySQL的大学生交友社交网站

热门文章

  1. Viliv N5 GPS安装及使用方法
  2. wordpress插件列表
  3. EMC变得更有中国味儿
  4. PTA: 7-2 银行业务队列简单模拟 (25 分)
  5. spring和mybatis结合做简单的增删查改系统_搭建后台系统权限系统的经验总结
  6. 1321:棋盘问题(深度优先搜索进阶)
  7. python爬虫︱百度百科的requests请求、百度URL格式、网页保存、爬虫模块
  8. BookCorpus数据集爬虫
  9. 关于hankcs库的自然语言处理
  10. [NLP]自然语言的处理步骤