0

我希望许多 gyp 脚本有一个共同的目标。所以我决定把它移到一个单独的包含文件中。产生错误的最简单的测试用例:

foo.gyp

{
    'includes'  : [
        'bar.gypi',
    ],
}

酒吧.gypi

{
    'targets': [
        {
            'target_name' : 'phony',
            'type' :    'none',
            'actions' : [
                {
                    'action_name' : '_phony_',
                    'inputs' :  ['',],
                    'outputs' : ['',],
                    'action' :  ['_phony_',],
                    'message' : '_phony_',
                },
            ],
        },
    ],
}

产生错误:

IndexError: string index out of range while reading include of foo.gyp while try to load foo.gyp

一些观察:

  • 如果我从目标中删除actions,一切都会很好地解析

  • 如果我targets(通过动作)移动到foo.gyp,一切都会很好地解析

难道我做错了什么?

4

1 回答 1

2

看起来“输出”列表不能为空或包含空字符串:

# gyp/make.py:893
self.WriteLn("%s: obj := $(abs_obj)" % QuoteSpaces(outputs[0]))

您可能有空输入,但在这种情况下,虚假动作只会拍摄一次。我在 GYP 文档中没有发现任何关于虚假操作的提及,但我有以下变体工作:

# bar.gypi
{
'targets': [
  {
    'target_name'   :   'phony',
    'type'          :   'none',
    'actions'       :   [
      {
        'action_name'   :   '_phony_',
        'inputs'        :   ['./bar.gypi'], # The action depends on this file
        'outputs'       :   ['test'],       # Some dummy file
        'action'        :   ['echo', 'test'],
        'message'       :   'Running phony target',
      },
    ],
  },
],

}

如果您告诉我更多有关您要解决的任务的信息,我可以尝试找到更好的方法。

于 2013-08-08T09:58:48.603 回答