每个源 cflags
Per-source cflags
在 gyp 中有没有办法只为某些源文件启用某些 cflags?
在 this bug 的上下文中,我想找到一种方法来编译一些代码并启用某些 SSE 功能,而其他代码(以在运行时检测所述功能的可用性并提供回退) 不应在优化期间使用这些功能。
像往常一样,我发现 node-gyp 文档完全不够。
作为解决方法,您可以在您的 .GYP 文件中使用特定的 cflags 创建一个静态库目标,然后 link 根据某些条件将此静态库针对您的主要目标。
{
'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
在 gyp 中有没有办法只为某些源文件启用某些 cflags?
在 this bug 的上下文中,我想找到一种方法来编译一些代码并启用某些 SSE 功能,而其他代码(以在运行时检测所述功能的可用性并提供回退) 不应在优化期间使用这些功能。
像往常一样,我发现 node-gyp 文档完全不够。
作为解决方法,您可以在您的 .GYP 文件中使用特定的 cflags 创建一个静态库目标,然后 link 根据某些条件将此静态库针对您的主要目标。
{
'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