Doxygen 如何让SCON将目录本身视为目标?

Doxygen 如何让SCON将目录本身视为目标?,doxygen,scons,Doxygen,Scons,我试图建立一个包含外部工具的构建,该工具生成一个目录作为输出(doxyindexer)。到目前为止,我基本上已经掌握了以下命令: target = "doxysearch.db/iamchert" doxygen.Doxyindexer(target,["project1.xml","project2.xml","project3.xml"]) Default([target]) Default(Install(ARGUMENTS["cgibin"],"doxysearch.db")) 我遇到

我试图建立一个包含外部工具的构建,该工具生成一个目录作为输出(
doxyindexer
)。到目前为止,我基本上已经掌握了以下命令:

target = "doxysearch.db/iamchert"
doxygen.Doxyindexer(target,["project1.xml","project2.xml","project3.xml"])
Default([target])
Default(Install(ARGUMENTS["cgibin"],"doxysearch.db"))
我遇到的问题是,我想我希望
target
是目录本身,而不是目录中的某个随机文件。没有什么我可以环球,因为目标不存在,直到我建立它,我不想假设任何东西,迪米特里可能会改变!当我将目录用作目标时,会出现以下错误:

TypeError: Tried to lookup Dir 'doxysearch.db' as a File.:
这就是为什么我选择了
iamchert
作为目标。即使我的方法是一种黑客攻击,这些行似乎都如预期的那样工作。然而,我不能让最后一行工作。我需要将目录
doxysearch.db
复制到用户在命令行上指定的
cgi-bin
目录中。也许有人能解释一下如何正确地完成这一步?说到烤饼,我是个新手


我在谷歌搜索答案时遇到了麻烦,因为所有涉及的搜索词都太常见,无法找到我的特定帮助

我不确定SCons在目标为目录的情况下工作得如何。问题是:SCON应该如何确定目录是否已经更改,或者不知道是否应该构建它?显而易见的答案是,如果目录中有更多或更少的文件,则认为目录已被更改,但我认为SCons目前不会进行此检查,您可能需要自己制作生成器才能获得它

我做了以下示例来测试这一点,但它从未构建:

env = Environment()
env.Command(target = 'targetDir',
            source = 'srcTextFile',
            action = Copy("$TARGET", "$SOURCE"))
当我执行SCON时,我总是得到相同的结果:

scons: '.' is up to date
关于您的SCons代码,我认为它会更好,如下所示:

targetDir = "doxysearch.db/iamchert"
srcFiles = ["project1.xml","project2.xml","project3.xml"]

doxygenTarget = doxygen.Doxyindexer(targetDir, srcFiles)

    # This may need to be called via the Command() builder like this:
    # cmd = "doxygen.Doxyindexer("$TARGET", "$SOURCE")
    # doxygenTarget = env.Command(target=targetDir, source=srcFiles, action=cmd)

# This call to Default isnt really necessary
Default(doxygenTarget)
Install(ARGUMENTS["cgibin"], doxygenTarget)

实际上,SCON将目录中的所有文件视为该目录的依赖项。有一些黑暗的角落,需要工作,但它应该在这样一个简单的情况下工作

您需要的是未记录的
target\u工厂
builder标志。定义
Doxyindexer
时,请执行以下操作:

doxyindexer = Builder(..., target_factory=env.fs.Dir)

并让构建器返回目录本身。这应该可以避免您遇到的类型错误。

我想问题在于如何计算目录作为目标的“期限”。一个黑客可能看起来像目录是tar'ed,并被用作目标。我认为,如果这能奏效,那么Scons可以在幕后实现某种方法。但听起来好像你在说SCON没有这种功能。@amos,在SCON中进行这种检查是完全可能的,因为它具有很强的可扩展性,但目前还没有实现这种行为。除了我提到的如果目录中有更多或更少的文件,则目录会被视为已更改之外,有些人可能会认为如果目录中的文件已更改,则目录也会被更改。这可能会很快变得复杂和低效,因为它可以扩展到子目录。