【问题标题】:Scons set s directory as NoCleanScons 将 s 目录设置为 NoClean
【发布时间】:2022-10-30 07:03:35
【问题描述】:

我使用 scons 作为我的 c++ 构建系统。

有一个包含静态库的子目录。

我试图设置:

NoClean("${PATH_TO_DIR}")

但是这个目录下的文件还是被scons -c删除了。

有没有办法阻止这个命令删除这个目录中生成的所有文件?

【问题讨论】:

  • 顺便说一句,您是否使用 SCons 构建库?如果没有,该文件将不会被删除。 SCons 只清理它可以重建的东西。如果您确实构建了库,为什么要防止清理它?
  • @NO_NAME 是的。当时没用。但我忘了更新我的答案。最后我制作了一个shell脚本来手动删除这些文件。 :P
  • 如果 PATH_TO_DIR 是 Environment() 变量,NoClean() 将无权访问它。你需要使用env.NoClean("${PATH_TO_DIR}")

标签: c++ build scons


【解决方案1】:

标志-c 或多或少像这样工作:

  1. 如果标志不存在,则列出可以通过此调用scons 构建的所有文件。
  2. 将标有Clean() 标记为要清理的相关文件添加到列表中。
  3. 从列表中删除标有NoClean() 的文件(非递归)。
  4. 从文件系统中删除列表中剩余的所有文件。

    SCons 非常专注于文件,它不适用于目录。通常,它只是在需要它们时自动创建它们,而在其余时间它假装它们不存在并且它都是一个平面文件系统。它甚至不会删除自动创建的目录,因此您的 NoClean() 是双重无效的 :-) (您需要在目录上调用 Clean() 以便 SCons 能够在清理期间将其删除。)

    我认为您唯一的选择是为您在此目录中创建的每个文件调用NoClean()。 (如果你有这些文件的列表/集合,你可以只调用一次NoClean(),将列表传递给它。)

【讨论】:

  • NoClean 对每个人来说都是一个不可接受的解决方案,因为文件太多了。没关系,我刚刚编写了一个 .sh 文件来删除这些 *.os 文件以避免使用 Clean
  • @ParallelParadox 为什么是 .sh?在 SCons 中,您可以使用 Python 的全部功能。您可以编写一个删除某些特定文件的函数并创建一个Alias() 以将其用作伪目标。或者您可以编写一个函数来查找您不想删除的所有文件并调用NoClean()
  • (: D > ∠)这对我来说是一个新想法,让我阅读官方文档..
【解决方案2】:

scons -c . 只会删除特定目录下的目标文件。所以这是解决我的问题的后备方案。

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多