J.P.Liu

机器学习从业者

  
CMake管理第三方依赖
最近在一个C++项目中尝试`Bazel`编译,编译依赖方式确实写着比较舒服和直观,但最后链接出来的二进制文件在执行时报`Segment error`,但用`CMake`编译出来的二进制文件就可以成功执行,Bazel编译的问题无从下手。另外,Bazel无法从系统目录查找头文件,这就不能忍了,有人建议从`cc_toolchain_config.bzl`查找问题,但toolchain实在是有点麻烦,就暂时放弃Bazel,继续使用CMake了。Bazel里提供的`git_repositry`等从外部源自动下载编译依赖的方式很好用,所以就思考在CMake里是不是也有类似的东西呢。之前使用CMake时,第三方依赖都是手动先在本地安装好,后来查找到了CMake里提供了类似Bazel的命令,那就是`ExternalProject`,不过这个命令只管下载编译等操作,但`git_repositry`更好使一些,它可以根据依赖自动判断是不是下载,而`ExternalProject`就没这么丝滑了,所以本文记录下在CMake怎样基于`ExternalProject`打造`git_repositry`那种丝滑的体验。