3

我正在为一个大型软件项目使用 scons 实现构建系统。有一个目录结构将各个库和程序的代码分隔到它们自己的目录中。使用我们现有的 make 系统,我可以在单个程序目录中执行“make clean”,它只会清理与该目录中的源关联的文件。但是,如果我执行“scons -c”,它会识别出该程序依赖于同级(或表亲)目录中的大量库,并清理这些文件的所有文件。这不是我想要的,因为我必须重建所有这些库,这可能需要几分钟。

我尝试过使用“NoClean()”命令,但没有让它以我需要的方式工作。考虑到代码库的大小和目录结构的复杂性,我实际上不可能为每个库中的每个文件都有一个 NoClean() 行。

有没有办法告诉 scons 在进行清理时忽略当前目录之上的任何依赖项(即 scons -c)?

4

2 回答 2

1

我很想亲自回答这个问题。

我现在能提供的唯一解决方案是让 Noclean 工作。所以在你的图书馆里,你应该有这样的东西

lib_objs = SharedObject(source_list)
mylib = SharedLibrary('libname', lib_objs)

因此,为此我们要保护库和源不被清理。

NoClean([mylib, lib_objs])

请注意,我必须从库中拆分目标文件的构建,因为我也希望能够将它们传递给 NoClean。

于 2013-10-25T12:39:28.823 回答
1

清理时尝试使用目标名称。

scons -c aTargetName

您可以使用SCons Alias()函数来简化目标名称并将多个目标名称组合到一个别名中。

使用这种方法,您必须在每个适当的子目录中添加一个别名,这不一定是一件坏事:)

于 2013-10-24T18:35:10.140 回答