如何将GYP目标移动到单独的包含文件中

时间:2013-08-07 12:01:52

标签: c++ build gyp

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

foo.gyp

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

bar.gypi

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

产生错误:

  

IndexError:读取时包含的字符串索引超出范围   foo.gyp同时加载foo.gyp

一些观察结果:

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

  • 如果我将targets(带有操作)移至foo.gyp,一切都能很好地解析

我做错了吗?谢谢!

1 个答案:

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

}

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