0
点赞
收藏
分享

微信扫一扫

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


举报

相关推荐

0 条评论