find_package()的底层运行机制

马斯克的龙飞船中的操作系统是Linux,软件工程使用的是C++,用GCC和GDB去调试代码,C++如此强大和灵活,所以有必要了解一下C++工程是如何make的.

我们在写CMakeLists.txt时候需要查找第三方库的头文件和库文件,通常直接是执行

find_package(xxx)

然后就会有对应的

${XXX_INCLUDE_DIRS}和${XXX_LIBRARIES}

如果find_package(xxx)失败的话,就不会生成这两个环境变量.
这里讲一下这两个环境变量是怎么产生的.

1 find_package的两种搜索库模式

Module模式:搜索CMAKE_MODULE_PATH指定路径下的FindXXX.cmake文件,执行该文件从而找到XXX库。其中,具体查找库并给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由FindXXX.cmake模块完成。

Config模式:搜索XXX_DIR指定路径下的XXXConfig.cmake文件,执行该文件从而找到XXX库。其中具体查找库并给XXX_INCLUDE_DIRS和XXX_LIBRARIES两个变量赋值的操作由XXXConfig.cmake模块完成。

2 CMakeLists.txt中常用的变量

CMAKE_BINARY_DIR

  PROJECT_BINARY_DIR 
  _BINARY_DIR
  CMAKE_BINARY_DIR

这三个变量指代的内容是一致的,如果是 in source 编译,指的就是工程顶层目录,如果是 out-of-source 编译,指的是工程编译发生的目录。

CMAKE_MODULE_PATH
这个变量用来定义自己的 cmake 模块所

你可能感兴趣的:(机器人技术,视觉SLAM,技术)