作者Mensholaten (REAL)
看板C_and_CPP
标题[问题] cmake project管理3rd party library
时间Thu Dec 24 01:22:16 2020
目前在Linux环境下编写 cmake project (corss compile)
会用到的3rd party library是采用事先下载好source code和自己的code同时编译
有点苦恼的地方是 不知道该如何用正规作法将library的路径导入至自己的project
目录结构大概类似这样
root
--- my_src
--- third_party
--- aaa
--- libaaa
--- ccc
--- libccc
find_package只能用在预先安装好的package 没办法用 配置阶段就会fail
libaaa目录为3rd party library的包含CMakeLists的原生资料夹
额外在创建aaa里另外增加CMakeLists
里面设定library header/so的路径为编译资料夹(BINARY_SOURCE)的路径
并且将这些变数设定为CACHE让其他target include / link 时使用
虽然这样做可以正确编译 但其实是额外多动了一些手脚才达成
还是想知道有没有更正确的作法?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.161.214.81 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1608744138.A.D80.html
1F:→ Lipraxde: 虽然不知道正不正规,不过可以用 add_subdirectory + 12/24 07:44
2F:→ Lipraxde: EXCLUDE_FROM_ALL 12/24 07:44
3F:→ eye5002003: find_package就是唯一的"正规"做法了啊,其他的都是看 12/24 13:11
4F:→ eye5002003: 你高兴,想怎麽做就怎麽做 12/24 13:13
5F:→ a971364285: 可以参考有名的开源专案,像是Blender 有 intern 跟 e 12/26 20:58
6F:→ a971364285: xtern 两个资料夹。 12/26 20:58
7F:→ Killercat: find_package门槛高 要看懂.cmake跟理解他原理并不容易 12/27 22:07
8F:→ Killercat: 但是说他是唯一正规做法这点并没有错 XD 12/27 22:07
9F:→ Lipraxde: find_ package 有时後不太适用,要从原始码编的话 add_ 12/28 00:42
10F:→ Lipraxde: subdirectory 简单多了,反正 cmake 只要能找得到 targ 12/28 00:42
11F:→ Lipraxde: et 就能动。 12/28 00:42
12F:推 dzwei: 如果算是常见的opensrc 我会建议用vcpkg 12/31 18:39
13F:→ dzwei: 当然 你也可以为你的3rd制作3rdConfig.cmake 12/31 18:48
14F:→ dzwei: 如果是简单阳春的3rdConfig.cmake 应该30行以内能搞定 12/31 18:58
15F:→ dzwei: 我之前参照opencv写的差不多这样。现在opencv官方写的 12/31 18:59
16F:→ dzwei: OpencvConfig.cmake 已经百行了。但我也没再回去看现行版的 12/31 19:00
17F:→ dzwei: OpencvConfig.cmake了 12/31 19:00