如何使用scons进行源代码构建?

dzh*_*lil 10 scons out-of-source

我一直在使用cmake从源代码构建我的项目,这非常方便,因为您避免使用不必要的文件污染源目录.

假设CMakeLists.txt在当前目录中,可以按如下方式完成:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

我怎样才能在scons中做同样的事情?

ric*_*chq 12

在您的SConstruct文件中,您使用变量目录:

SConscript("main.scons", variant_dir="build", duplicate=0)
Run Code Online (Sandbox Code Playgroud)

然后在main.scons你像往常一样设置一切:

env = Environment()
env.Program(target='foo', source=Split('foo.c bar.c'))
Run Code Online (Sandbox Code Playgroud)

可以通过(ab)使用存储库将变量dir硬编码到SConstruct中来实现这一点,但这种方法有其缺陷.对于记录,您将按如下所示运行上面的内容以构建另一个目录:

mkdir mybuild
cd mybuild
scons -Y .. -f ../main.scons
Run Code Online (Sandbox Code Playgroud)

最简单,最可行的方法就是使用variant_dir.然后,您可以像往常一样从顶级源目录运行它.所有构建工件都在build子目录中生成.

回应JesperE的评论,这里是你如何编写顶级SConstruct来添加一个可选的命名构建目录:

AddOption('--build', default='build')
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0)
Run Code Online (Sandbox Code Playgroud)

然后你可以从命令行调用它,如下所示,创建一个名为"baz"的构建目录:

$ scons --build=baz
Run Code Online (Sandbox Code Playgroud)

  • 您可以设置`variant_dir = GetLaunchDir()`以获得类似CMake的行为:将构建输出放在运行`scons`的目录中。这个想法的来源:https://github.com/memsharded/conan-scons-template/blob/master/src/SConstruct (2认同)