簡體   English   中英

通過調用python函數的Scons自定義生成器不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM