我正在努力弄清schemes
xcode
在scons
中的确切运作方式以及它们的用途。我有一个使用外部构建系统(Xcode
)在OS X上构建的跨平台产品。我希望能够从eclipse CDT
构建/调试,主要是因为符号搜索和调试器。我一直在使用$(TARGET)
,这种方法效果很好,但有一些怪癖。
我可以通过创建一个空项目并添加'外部构建系统'目标来实现这一点。然后,作为目标的'信息'的一部分,我将'构建工具'指定为 / usr / local / bin / scons ,'Arguments'是我发送给scons的构建参数。基本上我有以下构建变量$(BUILD_TYPE)
和Menu->Project->Clean
,这些变量根据构建是调试还是发布而有所不同,因此可以将它们指定为条件'构建设置'。
问题是我希望Xcode/xcodebuilder
能够正常工作。看起来$(ACTION)
使用$(ACTTION)
变量来传递此信息 - 其中scons -c
是'build','clean'或其他一些构建操作。见xcodebuild ACTION。 Scons有点不同 - 它有一个内置的干净动作,在ACTION
的命令行上调用。所以我的第一个想法是使用条件'构建设置'来传递此参数,但事实证明条件'构建设置'似乎不会因此而异构建Xcode/xcodebuilder
- 只是构建体系结构和SDK。
是否可以在Xcode
中为'构建设置'添加表达式?还有另一种好方法,我可以使用'清洁'在{{1}}中使用scons吗?
答案 0 :(得分:5)
为SCons
编写一个包装脚本,并将其放入您的项目中。例如:
$(PROJECT_DIR)/scons-xcode-wrapper.sh
$(ACTION)
从实验中看,$(ACTION)
在构建时显示为空,在清理时设置为clean
。
#!/bin/sh
cd "$PROJECT_DIR"
case $1 in
clean)
scons -c
;;
*)
scons
;;
esac
不要忘记chmod +x
你的剧本。
答案 1 :(得分:1)
使用SCons,您可以以编程方式设置构建以使用SetOption()
函数执行清理。 clean
选项和其他可以设置的选项列在here。
问题是SCons将命令行选项视为“--option”或“option = value”形式的目标。所以它不可能导致scons clean
之类的东西执行干净。我使用Alias()函数进行了测试,无法使其工作。
如果您可以选择将xcode用于$(ACTION)
的字符串更改为clean=1
之类的字符,那么您可以使用以下内容来以编程方式执行清理:< / p>
env = Environment()
if ARGUMENTS.get('clean') == '1':
print "Setting clean"
env.SetOption('clean', True)
print env.GetOption('clean')
...
这会导致干净:
scons clean=1
你也可以考虑AddOption()
,但这只允许--
前置的选项
答案 2 :(得分:1)
将'Arguments'参数设置为以:
结束--$(ACTION)
这将转换为:
scons [all your arguments] --clean
如果您查看scons here的文档,则可以看到--clean
与-c
Clean是唯一有效的,其他构建操作总是空白。
答案 3 :(得分:0)
您可以结合使用上述答案,即:
将您的参数设置为--xcode-action=$(ACTION)
。
将代码放入SConstruct中,如下所示:
env.AddOption('--xcode-action',
dest='xcode_action',
type='string',
action='store',
default='',
help='The action Xcode wishes to perform')
if GetOption('xcode_action') == 'clean':
SetOption('clean', True)
这基本上是我在scons-xcode中使用的解决方案。