6

我正试图弄清楚它们是如何schemes工作的xcode以及它们的用途。我有一个使用外部构建系统 ( scons) 在 OS X 上构建的跨平台产品。我希望能够从构建/调试Xcode,主要是因为符号搜索和调试器。我一直在使用eclipse CDT其中大部分效果很好,但有一些怪癖。

我可以通过创建一个空项目并添加一个“外部构建系统”目标来实现这一点。然后,作为目标“信息”的一部分,我将“构建工具”指定为/usr/local/bin/scons“参数”是我发送给 scons 的构建参数。基本上,我调用了以下构建变量$(TARGET),这些变量$(BUILD_TYPE)根据构建是调试还是发布而有所不同,因此可以将它们指定为有条件的 'Build Settings'

问题是我想Menu->Project->Clean工作。看起来像Xcode/xcodebuilder使用$(ACTION)变量来传递它 - 'build''clean'$(ACTTION)或其他一些构建操作在哪里。请参阅xcodebuild 操作。Scons 有点不同 - 它有一个内置的清理操作,可以在命令行上调用. 所以我的第一个想法是使用有条件的“构建设置”来传递此参数,但事实证明,有条件的“构建设置”似乎不会因构建而异——只是构建架构和 SDK。scons -cACTION

是否可以将表达式添加到“构建设置”Xcode/xcodebuilder?还有另一种好方法可以让我“干净”Xcode与 scons 一起工作吗?

4

4 回答 4

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你的脚本。

于 2013-04-15T02:51:14.563 回答
1

使用 SCons,您可以以编程SetOption()方式设置构建以使用该函数执行清理。此处clean列出了可以设置的选项和其他选项。

问题是 SCons 将非“--option”或“option=value”形式的命令行选项视为目标。所以它不可能导致像scons clean执行清洁这样的事情。我使用 Alias() 函数进行了测试,但无法使其正常工作。

如果您可以选择将 xcode 用于的字符串更改为$(ACTION)类似clean=1的内容,那么您可以通过以下方式以编程方式进行清理:

env = Environment()

if ARGUMENTS.get('clean') == '1':
    print "Setting clean"
    env.SetOption('clean', True)

print env.GetOption('clean')
...

这将导致一个干净的:

scons clean=1

您也可以考虑AddOption(), 但这仅允许带有--前缀的选项

于 2013-04-15T12:44:15.483 回答
1

将您的“参数”参数设置为以:

--$(ACTION)

这将转化为:

scons [all your arguments] --clean

如果您在此处查看 scons 的文档,您会发现它--clean的效果与-c

清洁是唯一有效的方法,但其他构建操作总是空白。

于 2014-05-27T14:07:49.587 回答
0

您可以使用上述答案的组合,即:

  1. 将您的论点设置为类似--xcode-action=$(ACTION).

  2. 像这样将代码放入您的 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中使用的解决方案。

于 2016-05-03T16:57:33.173 回答