2015-07-03 31 views
0

本来我绑定文件只有一个目标,并且已经精:重用构建条件

{ 
'targets': [ 
    { 
     'target_name': 'target1', 
     'sources': [ 'source1.cc', 'source2.cc' ], 
     'cflags_cc!': [ '-fno-rtti', '-fno-exceptions' ], 
     'cflags!': [ '-fno-exceptions' ], 
     'conditions': [ 
      #A very, very long condition 
     ] 
    }, 
} 

现在我需要另一个目标是或多或少相同,但建立一个可执行文件而不是链接对象。如果我复制原始目标,那就没问题,但我不想重复condition,这完全一样。我怎么能这样做?

E.g.我的理想bindin.gyp会看起来有点像这样:

{ 
'conditions': [ 
    #A very, very long condition 
] 

'targets': [ 
    { 
     'target_name': 'target1', 
     'sources': [ 'source1.cc', 'source2.cc' ], 
     'cflags_cc!': [ '-fno-rtti', '-fno-exceptions' ], 
     'cflags!': [ '-fno-exceptions' ], 
     'conditions' : #Refer to the conditions stated above 
    }, 
    { 
     'target_name': 'target2', 
     'type' : 'executable' 
     'sources': [ 'source1.cc', 'source3.cc' ], 
     'cflags_cc!': [ '-fno-rtti', '-fno-exceptions' ], 
     'cflags!': [ '-fno-exceptions' ], 
     'conditions' : #Refer to the conditions stated above 
    }, 
} 

我尝试使用variables但节点GYP只允许string类型或列表的变量,而“条件”是一个associative array

回答

0

我不是真的很确定,但是根据猜测,您可能会将长条件数组粘贴到第三个目标中,并依赖于来自其他两个条件的目标。事情是这样的:

{ 
'targets': [ 
    { 
     'target_name': 'conditions_target', 
     'conditions': [ 
      #A very, very long condition 
     ] 
    }, 
    { 
     'target_name': 'target1', 
     'sources': [ 'source1.cc', 'source2.cc' ], 
     'cflags_cc!': [ '-fno-rtti', '-fno-exceptions' ], 
     'cflags!': [ '-fno-exceptions' ], 
     'dependencies': [ 
      'conditions_target', 
     ], 
    }, 
    { 
     'target_name': 'target2', 
     'type' : 'executable' 
     'sources': [ 'source1.cc', 'source3.cc' ], 
     'cflags_cc!': [ '-fno-rtti', '-fno-exceptions' ], 
     'cflags!': [ '-fno-exceptions' ], 
     'dependencies': [ 
      'conditions_target', 
     ], 
    }, 
} 

但我不是很有经验的节点GYP和可能打击的事情了。 更多关于这里的依赖:https://gyp.gsrc.io/docs/UserDocumentation.md#Dependencies-between-targets