【问题标题】:Is it possible to automatically generate Xcode projects?是否可以自动生成 Xcode 项目?
【发布时间】:2009-07-11 16:58:59
【问题描述】:

简单的问题。是否有任何工具可以从命令行生成 Xcode 项目?我们使用 SCons 来构建我们的跨平台应用程序,但这不支持内部 Xcode 项目生成。我们希望避免手动创建项目,因为这将涉及维护多个文件列表。

【问题讨论】:

    标签: xcode scons


    【解决方案1】:

    看看CMake。您可以自动从中生成 XCode 项目。我发现了一个关于其用法的先前 StackOverflow 问题here。为了让它生成一个 XCode 项目,你可以这样使用它:

    CMake -G xcode
    

    【讨论】:

    • 是的,我们正在努力避免将项目转换为 CMake... 我想我们可以从 SCons 生成 CMakeLists.txt 文件,或者可能不会;)
    【解决方案2】:

    您可以使用 premake (http://industriousone.com/premake) 来生成 Xcode 项目。它还可以生成 Visual Studio 项目。

    【讨论】:

      【解决方案3】:

      为了解决这个问题的任何人的利益,我实际上只是将an Xcode project file generator for SCons 推到了 Bitbucket。

      【讨论】:

      • +1 - 有趣。这有可能与 Homebrew 兼容吗?如果它可以选择以 .swift 文件开头也很好。
      • @TommieC。生成器根本不关心源文件的内容(因此 Swift 源代码将 Just Work™)。生成器故意构建运行 SCons 的外部构建系统目标,因此构建不会偏离 SConstruct 文件中指定的内容。我认为 SCons 本身并不支持开箱即用的 Swift,但如果你精通 Python,你可以很容易地为它编写一个构建器。至于 Homebrew 支持,我不知道你想要什么。安装生成器所需要做的就是复制一个文件——我看不出 brew 有什么帮助。
      • 感谢您的提醒~我是一个不可知论者,所以我会看看 Python 选项。 brew 包将使代码“受管理”并使更新透明化,同时可能扩大用户群的范围。
      • @TommieC。我想您可以制作一个 brew 包以将其安装在系统范围的 site_scons 目录之一中,但由于必须从 SConstruct 文件中进行调用,我宁愿认为个别项目维护者会想要制作一个项目级 @ 987654323@ 并将其粘贴在那里。 brew 对此无济于事,并且在系统范围内安装只会使其成为每个人都必须安装的构建依赖项;最好将工具包含在我认为的相关来源中(也意味着没有版本控制问题,这与 autotools 有时会发生的情况不同)。
      【解决方案4】:

      我认为您的问题应该是“有没有办法从 SCons 生成 XCode 项目?”。我想,通过您的询问和阅读其他人,答案是否定的。

      SCons people 应该更了解它。我想如果你贡献一个 SCons Xcode 项目生成器,他们会很高兴的。

      与此同时,您可以选择切换到 CMake 或手动创建您的 XCode 项目,如果有良好的源代码树组织,这可能是最好的实用解决方案。

      【讨论】:

        【解决方案5】:

        Qt 工具链中的qmake 生成Xcode 项目。你至少可以下载它并查看它的源代码here (LGPL)。

        【讨论】:

          【解决方案6】:

          您可以使用名为waf 的基于python 的构建系统生成XCode 项目。你需要 download and install waf 使用 xcode6 扩展:

          $ curl -o waf-1.9.7.tar.bz2 https://waf.io/waf-1.9.7.tar.bz2
          $ tar xjvf waf-1.9.7.tar.bz2
          $ cd waf-1.9.7
          $ ./waf-light --tools=xcode6
          

          这将创建一个可以构建您的项目的waf 可执行文件。您需要配置如何在名为 wscript 的文件中生成 XCode 项目,该文件应位于项目文件夹中。 wscript 文件使用 Python 语法。下面是an example 说明如何配置项目:

          def configure(conf):
          
              # Use environment variables to set default project configuration
              # settings
              conf.env.FRAMEWORK_VERSION = '1.0'
              conf.env.ARCHS = 'x86_64'
          
              # This must be called at the end of configure()
              conf.load('xcode6')
          
          # This will build a XCode project with one target with type 'framework'
          def build(bld):
              bld.load('xcode6')
              bld.framework(
                  includes='include',
          
                  # Specify source files.
                  # This will become the groups (folders) inside XCode.
                  # Pass a dictionary to group by name. Use a list to add everything in one
                  source_files={
                      'MyLibSource': bld.path.ant_glob('src/MyLib/*.cpp|*.m|*.mm'),
                      'Include': bld.path.ant_glob(incl=['include/MyLib/*.h', 'include'], dir=True)
                  },
          
                  # export_headers will put the files in the
                  # 'Header Build Phase' in Xcode - i.e tell XCode to ship them with your .framework
                  export_headers=bld.path.ant_glob(incl=['include/MyLib/*.h', 'include/MyLib/SupportLib'], dir=True),
                  target='MyLib',
                  install='~/Library/Frameworks'
              )
          

          您可以使用许多设置来为您的项目配置它。

          然后实际生成 XCode 项目,cd 到您的项目文件夹中,wscript 所在的位置并运行您的 waf 可执行文件,如

          $ ./waf configure xcode6
          

          【讨论】:

          • 但是当我运行 ./waf build 我在 python 中得到一个错误 - AttributeError: 'BuildContext' object has no attribute 'framework'
          • 尝试编写“./waf xcode6”而不是“build”。并记住首先运行配置,即“./waf configure”。 @标记。希望对您有所帮助!
          【解决方案7】:

          您可以使用 Automator 为您生成它们。

          我检查并没有预建操作。 因此,您必须使用 Automator 记录您的操作才能执行此操作。

          【讨论】:

          • 刚刚检查了 Automator,我不确定我在寻找什么,因为它使用 GUI 来执行操作。我的想法更像是一种基于命令的方法......无论如何,谢谢。
          猜你喜欢
          • 2010-11-16
          • 1970-01-01
          • 2022-12-19
          • 1970-01-01
          • 2012-11-21
          • 2017-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多