scons - 使用 scons 生成预处理源?

标签 scons

我最近从 make 转换为 SCons。我通常在 make 中做的一件事是有一个从源文件生成预处理源的方法,其中包含将应用于正常构建的所有编译器选项。这对于确定 header 的包含方式很有用。

在 SCons 中做同样事情的最佳方法是什么?我找不到内置的构建器来执行此操作,所以我是否一直在编写自己的构建器?

最佳答案

我会写一个pseudo-builder使用特殊参数调用 env.Object,如下所示:

env = Environment()

# Create pseudo-builder and add to enviroment
def pre_process(env, source):
    env = env.Clone()
    env.Replace(OBJSUFFIX = '.E')
    env.AppendUnique(CCFLAGS = '-E')
    return env.Object(source)
env.AddMethod(pre_process, 'PreProcess')

# Regular build
source = ['a.c', 'b.c']
env.AppendUnique(CPPDEFINES = 'DO_COMPUTE_PI') # for example
main = env.Program('main', source)
env.Alias('build', 'main')
env.Default('build')

# Preprocessor build
env.Alias('preprocess', env.PreProcess(source))

示例输出。注意 -DDO_COMPUTE_PI 如何出现在常规编译和 -E 编译中:

$ scons -Q
gcc -o a.o -c -DDO_COMPUTE_PI a.c
gcc -o b.o -c -DDO_COMPUTE_PI b.c
gcc -o main a.o b.o
$ scons -Q preprocess
gcc -o a.E -c -E -DDO_COMPUTE_PI a.c
gcc -o b.E -c -E -DDO_COMPUTE_PI b.c
$ 

关于scons - 使用 scons 生成预处理源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195644/

相关文章:

scons - 编写一个执行外部命令和 python 函数的自定义构建器

python - 如何使用 scons 构建任意食谱?

visual-studio - 如何使用 Visual Studio 命令行 + SCons 构建 windows xp 应用程序?

scons - 如何使用 Scons 生成特定的 CPPDEFINE,例如 -DOEM ="FOO BAR"

build-process - 如何优化SCons脚本的启动时间?

python - SCons:如何在 scons 脚本中调用自定义的 python 函数并建立正确的依赖关系

c++ - 如何设置 scons 来构建已生成源文件的项目?

debugging - 如何调试 SCons 脚本

java - 从 SCONS 运行 ANT 脚本

mongodb - 卡在 Mavericks OSX 10.9 brew install 上安装 MongoDB 在 scons 线上挂起