【问题标题】:How can scons build SConscript in different directoryscons 如何在不同的目录中构建 SConscript
【发布时间】:2017-07-25 02:25:33
【问题描述】:

目录层次如下。

├── prog_1
│   ├── hello.c
│   └── SConscript
└── folder
    └── SConstruct

我尝试使用SConstruct在prog_1下构建hello.c,SConstruct如下:

SConscript('../prog_1/SConscript')

prog_1下的SConscript如下:

Program('hello.c')

无论 hello.c 的绝对路径还是相对路径,我都尝试过,但 scons 无法识别路径,它只是忽略了 prog_1 下指定的 SConscript 并完成了构建过程。有没有办法让scons进入这样的其他目录(非SConstruct的子目录)?

【问题讨论】:

  • 您能否详细说明“scons 无法识别路径”的含义?您是否从 SCons 收到错误消息?还是只是没有在 prog_1 下构建目标?
  • 嗨,bdbaddog。它只是跳过了 prog_1 下的构建目标并完成了构建过程。

标签: scons


【解决方案1】:

SCons 默认情况下位于构建项目的顶级文件夹中。例如,它不会像 make 那样“潜入”单个子文件夹。相反,所有命令的构造都使得您在SConscript 中指定的源文件和目标文件的文件夹相对路径从顶级SConstruct 扩展为有效。这样做的背景是,SCons 试图尽可能避免“chdir”,以便构建可以完全并行运行。

另外,默认情况下,SCons 只会构建顶级文件夹或以下文件夹中的文件,请参阅我们的 most frequently-asked frequently asked questions 的 #2。在您的情况下,这是SConstruct 所在的文件夹“folder”。 目标的“prog_1”和“hello”此时处于“构建树之外”。

您可以在每次调用 SCons 时显式指定目标:

scons ../prog_1

,或者将“prog_1”文件夹下移到“folder”目录中。

还请阅读我们User Guide 的第 14 章和第 15 章中的分层和变体构建。

【讨论】:

    【解决方案2】:
    SConscript('../prog_1/SConscript')
    

    修改prog_1下的SConscript如下:

    Default(Program('hello.c'))
    

    假设您在目录“文件夹”中运行 scons,SCons 默认只会尝试在当前目录或子目录中构建目标。

    如果您希望在外部有目标(在同级或其他目录树中),您需要在其 SConscripts(或在 SConstruct)中指出这些目标应默认构建或运行 scons

    scons ../prog_1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多