By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎订阅!
你的喜欢就是我写作的动力!
返回总目录 : Yocto开发讲解系列 - 总目录
SRC_URI变量
该变量在
bb
文件中用于获取本地或者远程源代码,构建过程
do_fetch
通过该变量获取源码。
SRC_URI
可以指定多个源码或者文件,是一个文件列表。
SRC_DIR
这个变量可以用来指定实际构建过程中源码的目录位置。
应用场景
我们假设有这样一个应用场景:
tree abcdir/
configure.ac
Makefile.am
abc.c
abc.h
xyzdir/
configure.ac
Makefile.am
xyz.c
xyz.h
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
在上面的本地
abcdir
项目的目录中存在一个子项目
xyzdir
,
xyzdir
可以独立构建,但是依赖
abcdir
目录中的abc.h头文件。
该项目这种组织形式是不推荐的,但是确实有这种项目。
那么我们该如何写
xyzdir
这个项目的recipe bb文件呢?
一般我们会这么写
xyzdir_git.bb
文件指定
SRC_URI
的语句如下:
# xyzdir_git.bb
FILESPATH =+ "${THISDIR}/your-dir/:"
SRC_URI = "file://abcdir/xyzdir/"
- 1
- 2
- 3
写好后我们开始编译,但是在编译阶段会出现一个错误,就是找不到
abc.h
头文件。
我们通过查看构建目录中:
build]$ ls tmp/work/xxx-poky-linux-gnueabi/xyzdir/git-r0/abcdir/
xyzdir/
- 1
- 2
发现这个
abcdir
目录下只有
xyzdir
目录,没有任何
abc.c
或
abc.h
等文件,这自然是找不到
abc.h
头文件。
那么我们就应该修正SRC_URI变量语句:
# xyzdir_git.bb
FILESPATH =+ "${THISDIR}/your-dir/:"
SRC_URI = "file://abcdir/"
- 1
- 2
- 3
但是这种语句会带来一个新的问题,就是我们实际要构建的是
abcdir/xyzdir
目录中的代码,而不是
abcdir
目录中的代码,那应该如何处理呢?
正确的做法应该是使用
SRC_DIR
变量来指定构建项目的实际路径:
# xyzdir_git.bb
FILESPATH =+ "${THISDIR}/your-dir/:"
SRC_URI = "file://abcdir/"
SRC_DIR = "file://abcdir/xyzdir/"
- 1
- 2
- 3
- 4
这样一来就可以正确编译了。如下所示:
build]$ ls tmp/work/xxx-poky-linux-gnueabi/xyzdir/git-r0/abcdir/
configure.ac
Makefile.am
abc.c
abc.h
xyzdir/
- 1
- 2
- 3
- 4
- 5
- 6
即有
abc.h
也有
xyzdir
目录,而且构建的时候也知道是在
abcdir
目录中构建。
感谢阅读!您的点赞加收藏就是我持续更新的动力!