Что означает этот синтаксис gyp?

#google-chrome #syntax #chromium #gyp

#google-chrome #синтаксис #chromium #gyp

Вопрос:

Недавно я копался в коде chromium, а затем нашел фрагмент кода, который я не мог понять. Файл находится по адресу src/media/media.gyp Может кто-нибудь объяснить, что означает эта строка на простом английском языке?

Строка, которую я не понимаю :

  '<!@(<(pkg-config) --cflags libpulse)',
  

Код :

 ['OS!="linux"', {
      'sources!': [
        'audio/cras/audio_manager_cras.cc',
        'audio/cras/audio_manager_cras.h',
        'audio/cras/cras_input.cc',
        'audio/cras/cras_input.h',
        'audio/cras/cras_unified.cc',
        'audio/cras/cras_unified.h',
      ],
    }],
    ['use_pulseaudio==1', {
      'cflags': [
        '<!@(<(pkg-config) --cflags libpulse)',            # <- this line
      ],
      'defines': [
        'USE_PULSEAUDIO',
      ],
      'conditions': [
        ['linux_link_pulseaudio==0', {
          'defines': [
            'DLOPEN_PULSEAUDIO',
          ],
          'variables': {
            'generate_stubs_script': '../tools/generate_stubs/generate_stubs.py',
            'extra_header': 'audio/pulse/pulse_stub_header.fragment',
            'sig_files': ['audio/pulse/pulse.sigs'],
  

Ответ №1:

Смотрите Расширения команд в документах gyp

<!@ означает расширения команд

При расширении команды вся строка, содержащаяся в круглых скобках, передается системной оболочке. Вывод команды присваивается строковому значению, которое впоследствии может быть расширено в контексте списка таким же образом, как расширения переменных, если используется символ @ .

Пример:

 {
  'sources': [
    '!(echo filename with space.cc)',
  ],
  'libraries': [
    '!@(pkg-config --libs-only-l apr-1)',
  ],
}
  

будет расширен до

 {
  'sources': [
    'filename with space.cc',  # no @, expands into a single string
  ],
  'libraries': [  # @ was used, so there's a separate list item for each lib
    '-lapr-1',
    '-lpthread',
  ],
}
  

Комментарии:

1. это то, что я искал. большое вам спасибо 🙂