Я хочу, чтобы у многих сценариев GIP была общая цель. Поэтому я решил переместить его в отдельный включаемый файл. Простейший тест-кейс, который выдает ошибку:
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
все хорошо разбирает
Я делаю что-то неправильно? Спасибо!
Похоже, список «результатов» не может быть пустым или содержать пустую строку:
# 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',
},
],
},
],
}
Я мог бы попытаться найти лучший способ, если бы вы рассказали мне больше о задаче, которую вы пытаетесь решить.
Других решений пока нет …