我正在研究VPP和DPDK,我们知道在VPP中,当我们sudo make build
时,它会将DPDK源代码提取到中/构建root/build-vpp_debug-native/external/src-dpdk,然后构建dpdk和vpp。
- 原始行为:当我更改src-dpdk中的任何文件并使用
sudo make build
时,它将首先构建dpdk,然后再次链接vpp - 意外行为:我创建了一个符号链接
src-dpdk
(通过使用ln-s…(来代替原始的src-dpdk
,如果我们使用sudo make rebuild
命令,它运行良好,并且它构建的dpdk将使用符号链接指向的正确路径,但当我在实际路径中做一些更改时,然后使用sudo make build
,构建似乎无法感知源文件的更改,所以不要再次构建dpdk,生成日志将显示无需执行任何操作
为什么我会使用符号链接:这是因为在原始vpp存储库中,git无法跟踪src-dpdk的更改,而对于我们的项目,我们有一个独立的dpdk git存储库,所以我想链接我们的dpdk,而不是vpp创建的src-dpdk。
附加:vpp使用make,dpdk使用忍者,介子
首先,makefile不应该使用目录作为目标/先决条件,而应该使用文件。当你这样做的时候,这些事情和更多的事情都会发生。正确的方法是手动列出任何目标或必备文件。尽管有时使用wildcard
可能对您有用。
有两个其他选项可能对您有效:
- 将-L/-检查符号链接时间传递给make命令:
sudo make -L build
- 在makefile中添加一个测试该目标是否是符号链接,如果是,则将该目标添加到
.PHONY