Scons使用Clang -MJ选项

时间:2018-05-15 03:28:48

标签: scons clang++

您好我正在尝试使用Scons构建系统在Windows上构建compile_commands.json,并且所有其他可能性都失败了。

我决定使用Clang -MJ选项来执行此操作,因为这似乎是最简单的解决方案。

问题是我不清楚如何使用Scons构建系统来做这件事;基本上我必须为每个构建命令添加-MJ myfilename.o.json。我目前正在构建一个包含多个源文件的库,如下所示: library = env.StaticLibrary(target=result_path + '/' + result_name, source=sources)

基本上最后我应该:clang++ -target x86_64-pc-windows-gnu -MJ AABB.o.json -o src/core/AABB.o -c -m64 -g -O3 -std=c++14 -Wwrite-strings -I. -I/c/GodotLibraries/godot_headers -Iinclude -Iinclude/core src/core/AABB.cpp

提前致谢,

`

2 个答案:

答案 0 :(得分:0)

您正在尝试为当前的构建环境设置特殊的编译器标志。这是通过将新标志附加到正确的环境变量来完成的。根据您要使用的构建过程(= Builder ),相应的单个构建操作(= Actions )可能使用不同的变量。 User Guide包含附录A“构造变量”,列出了默认变量及其概要。

在您的情况下,CCFLAGS是相关的,可以像这样使用:

env = Environment()
env.Append(CCFLAGS=['-MJ','AAB.o.json','-m64','-g','-O3'])

env.Program(...)

以同样的方式,你可以使<{>> SCons 使用clang编译器,相应地设置CXX变量:

env = Environment()
env['CXX']='clang'
env.Append(CCFLAGS=['-MJ','AAB.o.json','-m64','-g','-O3'])

env.Program(...)

我希望这能让您了解 SCons Builder / Action 设置背后的一般概念:执行命令的基本结构是每个 Builder 始终相同,但您可以通过设置和覆盖扩展的环境变量来影响最终输出。

答案 1 :(得分:0)

从SCons 4.0.0开始,您可以让SCons像这样构建编译数据库:

env.Tool('compilation_db')
env.CompilationDatabase('compile_commands.json')