Scons - 停止清理生成的 .obj 文件,清理静态库
Scons - Stop cleaning .obj files generated, on cleaning static library
使用Scons,如果我构建静态库,Scons编译所有源文件并生成.obj文件。现在当我想清理静态库时,我不想清理 .obj 文件,我该怎么做?
如果您不希望您的最终目标和您的静态库实际上相互依赖,您可以在两个单独的 SConstructs(两个 SCons 项目)中创建它们。像这样,您仍然可以通过名称引用库作为最终 application/executable 的输入...但是 SCons 不会检测到直接依赖项,这意味着静态库不会自动创建当您尝试创建最终目标时。您每次都必须手动执行此操作。这是这里的关键点:您要么想要一个依赖项 lib->exe,要么不需要。在前一种情况下,依赖项也适用于清除目标(并且隐含地在树的下方包含其所有依赖项)。
摆脱这种困境的一种方法是使用 NoClean() 函数(请参阅 http://www.scons.org/doc/production/HTML/scons-user.html 处的用户指南),但您必须用它包装每个单独的目标文件。关于您构建的正确性和稳定性的后果尚不清楚,所以我绝对不鼓励您这样做……也不鼓励任何其他阅读本文的用户。 ;)
怎么样:
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='.')
使用Scons,如果我构建静态库,Scons编译所有源文件并生成.obj文件。现在当我想清理静态库时,我不想清理 .obj 文件,我该怎么做?
如果您不希望您的最终目标和您的静态库实际上相互依赖,您可以在两个单独的 SConstructs(两个 SCons 项目)中创建它们。像这样,您仍然可以通过名称引用库作为最终 application/executable 的输入...但是 SCons 不会检测到直接依赖项,这意味着静态库不会自动创建当您尝试创建最终目标时。您每次都必须手动执行此操作。这是这里的关键点:您要么想要一个依赖项 lib->exe,要么不需要。在前一种情况下,依赖项也适用于清除目标(并且隐含地在树的下方包含其所有依赖项)。
摆脱这种困境的一种方法是使用 NoClean() 函数(请参阅 http://www.scons.org/doc/production/HTML/scons-user.html 处的用户指南),但您必须用它包装每个单独的目标文件。关于您构建的正确性和稳定性的后果尚不清楚,所以我绝对不鼓励您这样做……也不鼓励任何其他阅读本文的用户。 ;)
怎么样:
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='.')