cmake解决依赖问题的一个小技巧
还是以往的惯例
See the Pen Abstraction by 攻伤菊菊长 (@THISISAGOODNAME) on CodePen.
这个demo的效果可能并不怎么样,重点是这个demo对于jade和sass的使用。虽然Jade模板只有寥寥数行,但是编译后有几百行(应该是一目了然),而仅有不足百行的scss,编译后产生的css可能超过5千行(且未使用susy,compass等模块)
起因
cmake小白觉得每个库都要配置一个_INCLUDE_DIR变量和一个_LIBRARY(或_LIBRARIES)变量太过蛋疼
技巧
include({name})
include()函数的作用其实和其他语言的include()函数相同,就是把另一个文件中的内容在这个位置置换。
但是,cmake为我们提供了很多优秀方便的模块。定义在cmake/shader/Moudules下,模块可以在目录中查看,也可以上网查阅文档,比如3.5.1版本的自带模块,常用的库,比如openCL、openGL、openAL、lua、SSL、TK家族、CUDA等都可以直接配置使用,不再蛋疼
举个实例
include(FindGLUT)
include(FindOpenGL)
不要纠结于cmake命令的大小写问题,cmake配置文件不区分大小写
可以看到,cmake自动配置了GLUT和openGL以及GLU
实例2
include(FindBoost)
include(FindBullet)
这次,cmake配置好了boost库和bullet引擎
find_package({name})
前文叙述了include()引入模块的方法,但是,include()有一个显著的缺点,就是只能导入模块。对于模块定义之外的库/框架,可以选择自己写一个模块,或者干瞪眼。
find_package({name})就是cmake专门用来处理依赖问题的神器。find_package()能解决包括但不限于include()能解决的依赖问题。include()虽然很全了,但是依然有些不支持,比如glfw、opencv、oss。而find_package()则是查找本机上已经安装的库/框架,比如
find_package(sdl2)
find_package(opencv)
include()中没有sdl2模块,但是有sdl模块
依靠find_package({name})这个神器,常用类库在clion中配置,不再蛋疼,23333