2015-08-28 3 views
1

Есть ли способ gyp для включения определенных флагов только для некоторых исходных файлов?Исходные флагов

В контексте this bug Я хотел бы найти способ включить некоторый код, скомпилированный с некоторыми функциями SSE, в то время как другой код (для обнаружения доступности указанных функций во время выполнения и для предоставления резервных копий) не должен использоваться этих функций при оптимизации.

Как часто, я считаю, что документация node-gyp полностью недостаточна.

ответ

2

В качестве обходного пути вы можете создать статическую целевую библиотеку в вашем файле .GYP с определенными флагами, а затем связать этот статический lib с основной целью в зависимости от какого-либо условия.

{ 
    'variables: { 
     'use_sse4%': 0, # may be redefined in command line on configuration stage 
    }, 
    'targets: [ 
     # SSE4 specific target 
     { 
      'target_name': 'sse4_arch', 
      'type': 'static_library', 
      'sources': ['sse4_code.cpp'], 
      'cflags': ['-msse4.2'], 
     }, 
     # Non SSE4 code 
     { 
      'target_name': 'generic_arch', 
      'type': 'static_library', 
      'sources': ['generic_code.cpp'], 
     }, 
     # Your main target 
     { 
      'target_name': 'main_target',    
      'conditions': [ 
       ['use_sse4==1', # conditional dependency on the `use_ss4` variable 
        { 'dependencies': ['sse4_arch'] }, # true branch 
        { 'dependencies': ['generic_arch'] } # false branch 
       ], 
      ], 
     }, 
    ], 
} 

Более подробную информацию о зависимостях переменных и условий в GYP documentation

+0

Да, это работало хорошо. Даже не было условий, просто наличие 'main_target', скомпилированного без флага, было достаточно, чтобы код там мог проверять поддержку во время выполнения и вызывать только intzo' sse4_arch', если поддержка была обнаружена, хотя она все время была связана , Благодаря! – MvG

 Смежные вопросы

  • Нет связанных вопросов^_^