.so 依赖目录 cmake_CMake在Windows上的科学使用方式

5ef1b311c3b95c03bdee9a36d5fac823.png

在Github上下个什么C++的库,大概率可以用CMake来生成各种IDE的项目文件并且编译。有时候有的库会依赖别的库,这样在Windows上就有点问题了,因为Windows没有Linux那样统一的程序安装位置,CMake常常找不到依赖的位置。这里有个比较方便的办法,让CMake可以找到依赖。

不科学的方法

先说一下不科学的办法,本人之前一直是这么搞的。

例如下载个SDL2,下载个RecastNavigation,后者依赖前者。先编译好SDL2,然后用CMake试图编译Recast。直接Configure,会报错,因为找不到SDL2。

4de02af4179af583981d1dd0d1c2a004.png

最后三行,三个NOTFOUND。然后之前是怎么做的呢,直接一个个地,把这三个CMake变量设置成之前编译SDL2的位置。然后再Configure,就可以了。

想想,这种办法是非常不科学的,每次都要指定三个文件夹,其实完全上可以一次搞定。

在Linux上估计不用这么麻烦,因为可以直接apt-get install xxx-dev,就算自己编译,也(默认)会install到/usr/local/文件夹下,然后被CMake直接找到,一次性Configure成功。

INSTALL

CMake出来的Visual Studio解决方案里,大多有个INSTALL项目。之前总是完全忽略这个项目,恰好,编译solution的时候,这个又默认被忽略,其实这个很有用。

f4704d5f6c99f28f21469fcab862fd8e.png

这个项目下只有一个Post-Build Event,没有代码什么的,其作用就是把编译好的东西“安装”到某个路径下,在Windows上,就基本是复制了。这个项目直接Build整个solution的时候会被跳过去。

ab9151b228f04c9540fc0501fc98c81f.png

需要用鼠标指向这个INSTALL项目,右击-Build。

那么,复制到哪个地方呢?这就是CMAKE_INSTALL_PREFIX 指定的路径。很不幸,在Windows上默认是C:Program Files (x86)。如果不改的话,会失败,权限错误之类。我们这里换个位置,把CMAKE_INSTALL_PREFIX换成了E:/CMake Program Files/SDL2。

再点Configure-Generate,在Visual Studio里,右击INSTALL-Build,在Output里会发现,关键的文件都被拷贝到这个文件夹下了。

e71bda951304edc0c67b595fb1a848b0.png

比较科学的方法

再来看Recast的编译,这里,不要再一个个指定INCLUDE,LIBRARY之类的东西了,直接增加一个变量,点cmake-gui上的 Add Entry按钮,增加一个变量,CMAKE_PREFIX_PATH ,里面写SDL2刚才INSTALL的位置E:/CMake Program Files/SDL2。(运气好的话,E:/CMake Program Files/就可以,大概取决于写FindXXX.cmake的人。)

fc90d4dfab939adcc0dcf0c8b7620b75.png

这时再Configure,会直接成功!再也不用一点点指定头文件和库的位置了!

9dac44dd073322dc7703ce37d5ddb09a.png

顺便把Recast的CMAKE_INSTALL_PREFIX也换成我们的CMake Program Files,Configure-Generate-Open Project,然后 右击INSTALL-Build,等编译好执行完,库和Demo就自动跑到相应的位置了。

39e0129c1e6100adcbb0cfd78b934d17.png

如果有什么别的项目依赖Recast,同理设置一下CMAKE_PREFIX_PATH,也不用一点点Recast的指定头文件和库了。 这个PATH应该可以用分号分割,填多个路径。

其他

build文件夹的位置

最好把build文件夹放到源代码之外。例如这样:

62e562f0ddc76b9d88b46f6db9dd129e.png

recastnavigation-master是Github上下载的项目文件夹,build是自己建的空文件夹,然后在build文件夹下打开Powershell,执行

build> cmake-gui ..recastnavigation-master

文档

关键文档,搜cmakefind_package

让cmake打印出所有搜索过的路径(需要最新的测试版cmake)cmake命令行里加上 --debug-find

其他方法

好像也可以在环境变量加一个SDL2_DIR,让CMake自动找到位置,没测试过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值