如何将每个文件定义添加到 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)
这让我可以在每个文件的基础上定义内容,而无需单独列出文件。
我正在将一个 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)
这让我可以在每个文件的基础上定义内容,而无需单独列出文件。