shake:对项目内部构建的共享库的依赖

shake: dependency on shared library that is built internally in the project

在我的项目中,我想先建立一个共享库libfoo.so,然后建立一些使用这个共享库的测试程序。对于测试程序,如果我使用 need

need libfoo.so

然后每次 libfoo.so 更新时都会重建它们。相反,我想在 libfoo.so 存在并且头文件更改后构建测试程序(或首先构建测试程序)。

头文件的依赖可以通过gcc -MMD -MFneedMakefileDependencies来实现。

如何表达对 libfoo.so 存在的依赖,而不是每次都强制重建?

谢谢!

我觉得可以让shake在每次构建libfoo.so的时候写一个内容固定的临时文件,让测试程序依赖这个临时文件。此临时文件标记 libfoo.so.

的存在

如果我没理解错的话,你构建了一个库 libfoo.so,它也会生成一些头文件以便构建自身。您想编译一些使用这些头文件的程序,但是依赖 libfoo.so 本身会导致您的程序在更改时重建,这是过多的。

假设,答案是orderOnly ["libfoo.so"]。此构造确保 libfoo.so 在继续之前构建(因此头文件是正确的),但实际上并不依赖于它。 orderOnly 的主要用途是当你想要构建 "a lot of stuff" 时,然后扫描它(例如使用 gcc -MMD -MF)以找出确切依赖的部分。