cmake使⽤教程(四)调⽤外部共享库和头⽂件
⽂件组织形式:
创建根⽬录test1,在根⽬录下创建⽂件和src⽂件夹,在src/⽬录下创建和main.cpp,其中根⽬录下⾯的内容为:
1# 版本判断
2cmake_minimum_required(VERSION 3.0)
3# ⼯程名
4project(hello)
5# 添加⼦⽬录,该⽬录为⼦⽬录,会调⽤⼦⽬录的cmake⽂件,进⾏构建库
6add_subdirectory(src)
src/main.cpp的主要内容为:
1#include <hello.h> //这⾥通过安装的位置引⽤,以此达到调⽤外部库的实验
2
3int main()
4{
5    helloFunc();
6
7    return 0;
8}
从中可以看到的是包含⽬录并不是从本地⽂件来的,⽽是从系统路径搜索,因此需要配置共享库的路径和链接路径,因此主要的⼯作在的⽂件中
链接共享库和共享头⽂件
1# 添加包含⽬录,否则编译不通过
2include_directories(/home/ubuntu/work/usr/include/hello)
3
4# 包含⽬录添加后,编译通过但是链接出错,main.cpp:(.text+0x5):对‘helloFunc()’未定义的引⽤
5# 需要link共享库⽬录,我们还没链接到共享库libhello上
6# 添加链接库⽬录
为什么现在都用cmake7link_directories(/home/ubuntu/work/usr/lib)
8
9
10# 构建可执⾏⽂件
11add_executable(main main.cpp)
12
13# 包含⽬录添加后,编译通过但是链接出错,main.cpp:(.text+0x5):对‘helloFunc()’未定义的引⽤
14# 需要link共享库,我们还没链接到共享库libhello上
15# 为 target添加共享库
16# target_link_libraries(main hello)
17# target_link_libraries(main libhello.so)
18# 添加静态库
19target_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 ...])
添加⾮标准的共享库搜索路径,⽐如,在⼯程内部同时存在共享库和可执⾏⼆进制,在编译时就需要指定⼀下这些共享库的路径。这个例⼦中我们⽤到这个指令。因为创建的共享库没有在系统⽬录 中,不指定他是不⼤的, 因此可以通过该命令进⾏指定即可
上⾯执⾏结果后:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。