我在考虑为一个新项目使用SCons。它看起来非常好,但我发现VariantDir
相当令人困惑。
我有一个简单的项目,在一个目录中有几个C源文件,并且我想以“正常”和“配置文件”模式构建 - 使用两组不同的选项来gcc。我希望输出分别进入normal/和profile/目录。
为了测试,我只剩下一个源文件t.c,其中有一个main()
函数。我的文件位于同一个目录中,看起来像这样:
normal = DefaultEnvironment(tools=['mingw'], CCFLAGS = '-O2')
normal.VariantDir('release', '.', duplicate=0)
normal.Program('t', ['t.c'])
#profile = normal.Clone(CCFLAGS='-O2 -pg', LINKFLAGS = '-pg')
#profile.VariantDir('profile', '.', duplicate=0)
#profile.Program('t', ['t.c'])
当我运行scons时,我期望它将t.o和t.exe放入release /目录中,但实际上它将它们放在当前目录中。如果取消注释3个配置文件行并运行,我将得到以下错误消息:“scons: ***为同一目标指定了具有不同操作的两个环境:t.o”。基本上,我不确定为什么我的VariantDir()调用没有告诉scons将输出放在指定的输出目录“release”中。(我已经在文档和新闻组中读了很多,但没有回答这个问题的内容。我最接近的是this page,其中描述了类似的事情,但它涉及到一个单独的src/目录和两个不同的scons文件,并在它们之间导入/导出变量。这看起来不太好。)