使用Scons,如果我构建静态库,Scons将编译所有源文件并生成.obj文件。现在,当我想清理静态库时,我不想清理.obj文件,我该怎么做?
答案 0 :(得分:1)
怎么样:
env = Environment()
sources = ['tridip.c', 'tridip1.c', 'tridip2.c']
objects = [ env.StaticObject(sf) for sf in sources ]
env.NoClean(objects)
lib = env.StaticLibrary('tridip', objecst)
exe = env.Program('tridip3.c', LIBS=lib, LIBPATH='.')
答案 1 :(得分:0)
如果您不希望最终目标和静态库实际上彼此依赖,则可以在两个单独的SConstructs(两个SCons项目)中创建它们。像这样,您仍然可以通过名称引用库作为最终应用程序/可执行文件的输入......但SCons没有检测到直接依赖,这意味着静态库不会获得尝试创建最终目标时自动创建。您每次都必须手动执行此操作。这是关键点:你要么想要依赖lib-> exe,要么不想要。在前一种情况下,依赖性也适用于清理目标(并且隐含地在树中进一步隐藏所有依赖关系)。
摆脱这种困境的方法是使用NoClean()函数(请参阅http://www.scons.org/doc/production/HTML/scons-user.html处的UserGuide),但是您必须用它包装每个单个目标文件。关于你的构建的正确性和稳定性的后果尚不清楚,所以我绝对不鼓励你这样做......也不是任何其他读这篇文章的用户。 ;)