[英]Scons custom builder by invoking python function does not work
我通過調用python函數SConstruct代碼創建了一個構建器:
def compile_c(dsts, srcs, env):
for (src, dst) in zip(srcs, dsts):
print src, dst
com2 = [
"mkdir -p %s" % os.path.dirname(dst),
"rm -f %s" % dst,
"%s -M %s -Wno-error %s > %s.tmp" % (env['CC'], ' '.join(env['CFLAGS']), src, dst),
"sed 's,\($*\)\.o[ :]*,%s/objects/c/\1.o %s : ,g' < %s.tmp > %s" % (env['RUNRULE_DIR'], dst, dst, dst),
"rm -f %s.tmp" % dst
]
for com in com2:
print com
if os.system(com):
exit(1)
return None
bld = Builder(action = compile_c)
env = Environment(BUILDERS = {'Foo' : bld})
env["C_D"] = ['../RunRules/Simulation/objects/c/ThreeDAverageVariableCpuCode.d']
env["C_SRC"] = ['ThreeDAverageVariableCpuCode.c']
env.Foo(env["C_D"], env["C_SRC"])
目標文件不存在,但是在構建時它沒有任何效果,並且忽略了打印功能:
awp-max/CPUCode ▸ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
awp-max/CPUCode ▸
目標文件仍然不存在。
我已經通過將env ['C_D']修改為絕對路徑來解決了這個問題。
您正在嘗試構建當前目錄之外的目標。 在這種情況下,您必須在命令行上指定目標的相對路徑,例如:
scons ../RunRules/ThreeDAverageVariableCpuCode.d
或使用絕對路徑,如您自己的答案所建議。
要閱讀有關此主題的內容,請訪問我們的常見問題解答頁面 ,尤其是閱讀有關我們“最常見的常見問題解答”中#2的評論(您會在頁面頂部找到一個鏈接)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.