[ToolsChain] 关于cmake 编译时候编译器寻找路径问题,两种解决即使findpackage也提示找不到头文件或库的办法
写在前面
自动安装了anaconda 之后 (以及使用源码编译安装,apt安装等不同方式)安装库,我编写cmakelist的时候会经常找不到一些已经确认安装好的库,如有此篇记录,防止corona后遗症。
outline
- 继续修改cmakelist
- 添加cmake编译路径
我的报错示例
我使用apt get方式安装的glog,
find了package 和add了头文件和库
依旧报相关错误,根本原因就是找不到对应的库导致的为定义符号问题。
修改cmakelist
既然我是aptget方式安装的,那么可以使用
dpkg-query -L libgoogle-glog-dev | grep libglog
找到头文件 和要使用的库(比如我这里用来动态库so)
Set(GLOG_INCLUDE_DIRS "/usr/include/glog/")
Set(GLOG_LIBRARIES "/usr/lib/x86_64-linux-gnu/libglog.so")
重新编译问题解决
ps: 这里也看得出我问题之一就是有一个非常见的系统默认路径??所以自己设定了
修改cmake查找路径
这个我理解和visual studio; matlab的设置大同小异
比如方法find package没有找的原因就是搜索路径下没有,如此加上去就好了。
cmake -LAH
可以看一下当前已经有的路径
两种方式,一种是只针对本项目,一种是全局的设置。见下:(注意是修改和expand两种)
cmake -DCMAKE_PREFIX_PATH="/usr/include/glog/:/usr/lib/x86_64-linux-gnu/"
运行cmake命令时临时生效,不会影响到其他CMake配置
export CMAKE_PREFIX_PATH="/usr/include/glog/:/usr/lib/x86_64-linux-gnu/"
shell中执行这个export命令后,所有后续的cmake命令都会考虑到这个环境变量的值(我理解是本shell 懒得实验了)
export CMAKE_PREFIX_PATH="/usr/include/glog/:/usr/lib/x86_64-linux-gnu/:$CMAKE_PREFIX_PATH"
这个是全局修改的expand模式(不删除)
网上还看到一种方式,可以针对一个cmakelist单独设置一个路径,也就是写在cmakelist里
set(CMAKE_PREFIX_PATH "/path/to/package-config-file-directory" ${CMAKE_PREFIX_PATH})
感觉人类发明的东西还挺灵活的