Ben*_*oyt 8 c python makefile scons
我正在考虑将SCons用于新项目.它看起来真的很好,虽然我发现VariantDir很混乱.
我有一个简单的项目,在一个目录中有一些C源文件,我想在"正常"和"配置文件"模式下构建 - 与gcc有两组不同的选项.我希望输出分别进入普通/和配置文件/目录.
为了进行测试,我已经减少了一个源文件tc,其中有一个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'])
Run Code Online (Sandbox Code Playgroud)
当我运行scons时,我希望它将to和t.exe放入release /,但它将它们放在当前目录中.并且我无法运行它,并且3个配置文件行未注释 - 如果我这样做,我会收到此错误:
scons:***为同一目标指定了两个具有不同操作的环境:to
基本上,我不确定为什么我的VariantDir()调用没有告诉scons将输出放在指定的输出目录中release.
(我在文档和新闻组中读了很多,但没有回答这个问题.我最接近的是这个页面,它描述了类似的东西,但它涉及一个单独的src /目录和两个独立的scons文件,以及在它们之间导入/导出变量.这看起来不太愉快.)
是的,VariantDir在scons中令人困惑.虽然宣传不好,但您可以将SConstruct和SConscript放在同一目录中,使用当前目录作为源目录
# SConstruct
SConscript('SConscript', build_dir='build', src='.')
Run Code Online (Sandbox Code Playgroud)
和
# SConscript
Program('main.c')
Run Code Online (Sandbox Code Playgroud)
我从来没有找到一种方法来避免使用两个文件,同时保持我的理智试图理解变量目录:)
我能够使用此调用在构建目录中分隔二进制文件:
# SConstruct
SConscript('SConscript', variant_dir='build', src_dir='..', duplicate=0)
Run Code Online (Sandbox Code Playgroud)
如果要将二进制文件放入以下两个级别的目录中,请执行以下操作:
# SConstruct
SConscript('SConscript', variant_dir='build/release', src_dir='../..', duplicate=0)
Run Code Online (Sandbox Code Playgroud)
基本上,将src_dir参数作为从构建目录返回到源目录的路径.
正如http://www.scons.org/wiki/VariantDir%28%29所说,
请注意,当您不使用 src 子目录中的 SConscript 文件时,您实际上必须指定必须从 build/hello.c 文件构建程序,SCons 将在 build 子目录中复制该文件。
VariantDir('release','.',duplicate=0)
env=Environment()
env.Program('release/t',['release/t.c'])
Run Code Online (Sandbox Code Playgroud)
当我在 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.
Run Code Online (Sandbox Code Playgroud)
我想它也可以在 Win32 上运行
| 归档时间: |
|
| 查看次数: |
8454 次 |
| 最近记录: |