用 CMake 交叉编译时如何处理第三方库文件里的绝对路径?

2020-10-08 20:51:06 +08:00
 dangyuluo

比如我们准备了一个aarch64的根目录 SYSROOT,放在/var/systoor里。然后其中有一个第三方库提供了个 CMake 文件,/var/sysroot/usr/lib/cmake/xxx/xxxConfig.cmake。然而在这个 CMake 文件里,作者写死了一个 library 路径:

SET(FreeType_LIB /usr/lib/aarch64-linux-gnu/libfreetype.so)

但很显然这个路径是相对于 SYSROOT 下的而不是本机根目录下的,但 CMake 又不能意识到这点,傻乎乎的在本机寻找这个文件,当然会报错说没有找到。

有没有什么办法告诉 CMake,对于/usr/lib开头的所有库,都在路径前附加一个SYSROOT的路径呢?

谢谢

2241 次点击
所在节点    C++
5 条回复
felixlong
2020-10-08 21:13:39 +08:00
SET(CFLAGS, "$CFLAGS --sysroot=/var/sysroot")
MCVector
2020-10-08 21:28:23 +08:00
12101111
2020-10-08 22:36:45 +08:00
这个路径不应该是从 pkgconfig 读出来的吗
mingl0280
2020-10-09 07:30:39 +08:00
新建一个 toolchain 文件,里面加上
set(CMAKE_SYSROOT "/var/sysroot")
即可。
注意只能使用 toolchain 生效。
waruqi
2020-10-09 13:09:33 +08:00
还可以试试用 xmake 来编译,交叉编译配置很方便的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX