这个gyp语法是什么意思?

时间:2014-06-23 08:44:48

标签: google-chrome syntax chromium gyp

我最近一直在挖掘铬代码,然后我找到了一些我无法理解的代码。文件位于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 个答案:

答案 0 :(得分:3)

请参阅Command-Expansions in the gyp docs

<!@表示命令扩展

在命令扩展中,括号中包含的整个字符串将传递给系统的shell。命令的输出被分配给一个字符串值,如果使用@字符,该字符串值可以随后在变量扩展中以列表上下文进行扩展。

示例:

{
  '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',
  ],
}