cmake自己写库的modules文件

cmake自己写库的modules文件

  • cmake自己写库的modules文件

cmake自己写库的modules文件

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

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

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

测试用的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函数会到这个路径下寻找-config.cmake或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

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