12

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

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

mkdir build
cd build
cmake ..
make

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

4

1 回答 1

13

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

SConscript("main.scons", variant_dir="build", duplicate=0)

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

env = Environment()
env.Program(target='foo', source=Split('foo.c bar.c'))

可以通过(ab)使用存储库将变体目录硬编码到 SConstruct 中,但这种方法有其错误。作为记录,您将按以下方式运行上述代码以在另一个目录中构建:

mkdir mybuild
cd mybuild
scons -Y .. -f ../main.scons

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

作为对JesperE评论的回应,您可以通过以下方式编写顶级 SConstruct 以添加可选命名的构建目录:

AddOption('--build', default='build')
SConscript("main.scons", variant_dir=GetOption('build'), duplicate=0)

然后你可以从命令行调用它,创建一个名为“baz”的构建目录:

$ scons --build=baz
于 2009-11-19T14:48:44.520 回答