2015-08-28 84 views
1

gyp是否有一種方法可以爲某些源文件啓用某些cflags?per-source cflags

this bug的上下文中,我想找到一種方法來啓用某些SSE功能來編譯某些代碼,而其他代碼(用於在運行時檢測所述功能的可用性並提供回退功能)不應該使用在優化期間的這些功能。

像往常一樣,我發現node-gyp文檔徹底不足。

回答

2

作爲解決方法,您可以在具有特定cflags的.GYP文件中創建靜態庫目標,然後根據某些條件將此靜態庫鏈接到主目標。關於依賴,變量和條件

{ 
    '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

相關問題