当编写将在不同平台和编译器上使用的scons脚本时,有时需要添加编译器特定的标志。伪代码中的Fx
//Declare variable inputSearch of type EditText
EditText inputSearch;
//Link the inputSearch variable with the EditText with id inputSearch that should be present in layout/activity_list_view.xml
inputSearch = (EditText) findViewById(R.id.inputSearch);
在较早的时候,我刚刚复制了if using_gcc:
env.Append( CCFLAGS=["-g"] )
elif using_msvc:
env.Append( CCFLAGS=["/Zi"] )
下的相应(?).py
文件并对其进行了修改并置于Tools
下,但这似乎是一个黑客的解决方案。
有没有更好的方法来实现这个结果?如果可以在site_tools
下添加它以获得全局效果(不必亲自攻击工具文件),这当然会很好。
注意:我发现在site_scons
下执行此操作的原因是它可以在多个项目之间共享的公共构建系统中完成。当然,这意味着必须在项目的所有参与者之间共享这个构建系统。
答案 0 :(得分:1)
我利用SCons在OSX,Winders和Linux上构建,使用相同的脚本,并且通常处理像这样的平台相关标志。
import platform
env = Environment()
env['SYSTEM'] = platform.system().lower()
if env['SYSTEM'] in ['linux', 'darwin']:
env.Append( CCFLAGS=["-g"] )
if env['SYSTEM'] == 'windows':
env.Append( CCFLAGS=["/Zi"] )
我将系统添加为环境变量,因为它通常会出现几次,并且只是让它随处可用是很方便的。
请注意,当您混合使用工具链,构建模式和其他有趣的选项时,此逻辑通常会变得更加复杂。
我尽量不使用site_scons,用户环境变量或任何点文件来修改构建环境。我发现将整个环境规范定义在一个地方更有用,并保证(尽可能)对所有平台上的所有用户都相同。