在binding.gyp中重用多个目标的构建条件

时间:2015-07-03 09:11:49

标签: node-gyp

最初我的绑定文件只有一个目标,并且很好:

{
'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,但node-gyp只允许使用string或list类型的变量,而'conditions'是associative array

1 个答案:

答案 0 :(得分: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',
        ],
    },
}

但是我对node-gyp并不是很有经验,这可能会让事情变得更糟。 有关依赖关系的更多信息,请访问:https://gyp.gsrc.io/docs/UserDocumentation.md#Dependencies-between-targets