我在考虑使用 SCons的一个新项目。它看起来非常不错,但我发现VariantDir相当混乱。

我用C源文件在一个目录中屈指可数一个简单的项目,我想建立“正常”和“行规”模式 - 用两套不同的选项,GCC。我想输出在正常走/和简档/目录,分别

有关的测试,我已经切回只是一个单一的源文件,T.C,其中有一个main()。我SConstruct文件在同一目录中,如下所示:

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到发布/,但是却让他们在当前目录。我不能运行它与3条轮廓线注释掉在所有 - 如果我这样做,我得到这个错误:

<强> scons的:***两种环境具有不同的行动是对同一目标指定:T.O

基本上,我不能确定为什么我的VariantDir()调用没有告诉scons的把输出在指定的输出目录,release

(我读过的文档和新闻组公平一点,但没有什么回答了这个问题。我来最接近的是的此页面,它描述了类似的事情,但它涉及到一个单独的src /目录和两个独立的scons的文件,并导入/导出它们之间的变量。这似乎不愉快。)

有帮助吗?

解决方案

是,VariantDir在scons的混淆。尽管没有很好地通告,就可以把两个SConstruct和SConscript在相同的目录中,使用当前目录作为源目录

# SConstruct
SConscript('SConscript', build_dir='build', src='.')

# SConscript
Program('main.c')

我从来没有找到一种方法来避免使用两个文件,同时保持我的理智试图了解变种DIR:)

其他提示

我是能够使用该呼叫在一个构建目录以分离二进制文件:

# SConstruct
SConscript('SConscript', variant_dir='build', src_dir='..', duplicate=0)

如果你想要把二进制文件放到一个目录下面两个层次,做到这一点:

# SConstruct
SConscript('SConscript', variant_dir='build/release', src_dir='../..', duplicate=0)

基本上,从构建目录提供src_dir参数作为路径返回源目录。

http://www.scons.org/wiki/VariantDir%28%29 表示,

  

请注意,当你不使用src子目录的SConscript文件,你必须实际指定的程序必须从构建/ hello.c的文件,该文件将使用SCons在构建子目录复制建造。

VariantDir('release','.',duplicate=0)
env=Environment()
env.Program('release/t',['release/t.c'])

当我在Linux scons运行它。

scons -u . 
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: release
gcc -o release/t.o -c t.c
gcc -o release/t release/t.o
scons: done building targets.

我想这也将在Win32工作

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top