[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})

感觉人类发明的东西还挺灵活的