1
gyp是否有一種方法可以爲某些源文件啓用某些cflags?per-source cflags
在this bug的上下文中,我想找到一種方法來啓用某些SSE功能來編譯某些代碼,而其他代碼(用於在運行時檢測所述功能的可用性並提供回退功能)不應該使用在優化期間的這些功能。
像往常一樣,我發現node-gyp文檔徹底不足。
gyp是否有一種方法可以爲某些源文件啓用某些cflags?per-source cflags
在this bug的上下文中,我想找到一種方法來啓用某些SSE功能來編譯某些代碼,而其他代碼(用於在運行時檢測所述功能的可用性並提供回退功能)不應該使用在優化期間的這些功能。
像往常一樣,我發現node-gyp文檔徹底不足。
作爲解決方法,您可以在具有特定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
是的,這個工作很好。甚至不需要條件,僅僅編譯沒有標誌的'main_target'就足夠了,這樣那裏的代碼就可以檢查運行時支持,並且只有在實際檢測到支持的情況下才調用intzo'sse4_arch',即使它始終連接在一起。謝謝! – MvG