cmake自己写库的modules文件

cmake自己写库的modules文件

cmake自己写库的modules文件

最近在做海思的平台,用到了一些第三方库,比如glog、gflag等。我们都知道cmake可以自己去通过find_package来查找相应的库,我也是被逼自己写modules-config.cmake文件。

find_package的原理和使用方法,网上有一大堆,我就不再废话了,我还是以glog为例,来进行说明。

我们在做嵌入式的时候,经常要自己编译一些库文件,然后指定一个安装路径,我现在编译了glog然后,安装到了install目录中,目录结构如下图所示。这里面是没有可供find_package来使用的<Module>-config.cmake文件的,
在这里插入图片描述

测试用的main.cpp很简单,如下


int main(int argc, char* argv[]) {
    // Initialize Google’s logging library.
    google::InitGoogleLogging(argv[0]);
    
    while(1){
    LOG(ERROR) << "Found " << "1111" << " cookies";

    }
}

只是简单的打印一条log信息。
顶层的CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.15)

project(glog_test C CXX)

add_executable(${PROJECT_NAME} main.cpp)

set(glog_DIR ${CMAKE_CURRENT_LIST_DIR}/third_party)
find_package(glog REQUIRED)

target_link_libraries(${PROJECT_NAME}
  PRIVATE
  glog::glog)

这里面重要的是glog_DIR的设置,这个路径是glog-config.cmake文件存在的路径。find_package函数会到这个路径下寻找<Module>-config.cmake或<Module>Config.cmake文件。找到后,就进行加载。看到target_link_llibraries这个里面写的是glog::glog,这个是库的别名,叫符合 现代CMake的写法,下面的代码会说道。

再来看glog-config.cmake文件,

add_library(glog::glog STATIC IMPORTED)

set_target_properties(glog::glog PROPERTIES
  IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/lib/libglog.a
  INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/include
  )

这里面也很简单,目前的写法,是适应最新的target方式的写法,使用add_library添加一个target,这个target是引用一个库,库的类型是静态的类型,使用IMPORTED创建的target,cmake不会给他添加编译功能,再接下来,就是设置target的相关属性,对于链接一个库来说,最重要的两个方面,其实就是对应的头文件在什么地方,和库文件在什么地方,所以set_target_property里面,就只是设置了这两个内容。代码都在压缩包里面 https://download.csdn.net/download/aifei7320/14093750

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值