如何将每个文件定义添加到 scons 项目

How can I add per-file defines to a scons project

我正在将一个 makefile 项目移植到 scons,但我不知道如何为每个文件创建唯一的 #define。我想为每个文件定义基本文件名,以支持一些自定义调试宏。在 makefile 中,我可以使用以下定义来执行此操作。

-DBASE_FILE_NAME=\"$(<F)\"

我不确定该怎么做,或者在 scons 中是否可行,希望得到任何反馈。

也许是以下? (还没有尝试过,但按照这些思路应该可以工作)

env.Program('filename.c',CPPDEFINES='-DBASE_FILE_NAME=\"$SOURCE\"')

经过一些实验,以下似乎有效。

import os
from glob import glob

# use Python glob, not scons Glob!
CPP_FILES = glob('./src/*.cpp')

env = Environment(CPPPATH='./include', etc...)

for f in CPP_FILES:
    env.Object(f, CPPDEFINES={'BASE_FILENAME' : "\\"" + os.path.basename(f) + "\\""})

O_FILES = [os.path.splitext(f)[0] + '.o' for f in CPP_FILES]

env.Program('myprogram', O_FILES)

这让我可以在每个文件的基础上定义内容,而无需单独列出文件。