cmake使用教程(四)调用外部共享库和头文件

文件组织形式:

cmake使用教程(四)调用外部共享库和头文件_第1张图片

 创建根目录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  //这里通过安装的位置引用,以此达到调用外部库的实验

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使用教程(四)调用外部共享库和头文件_第2张图片

 cmake使用教程(四)调用外部共享库和头文件_第3张图片

 

你可能感兴趣的:(cmake,c++)