简单的问题。是否有任何工具可以从命令行生成Xcode项目?我们使用SCons构建我们的跨平台应用程序,但它不支持内在的Xcode项目生成。我们希望避免手动创建项目,因为这将涉及维护多个文件列表。
为了让任何看到这个问题的人受益,我已经将一个用于生成SCons Xcode项目文件的Xcode 项目文件生成器上传到Bitbucket。
site_scons
目录中,但由于调用必须从SConstruct文件中进行,我想个别项目维护者会想要创建一个项目级别的site_scons
并将其放置在那里。brew对此没有帮助,而全局安装只会使它成为每个人都必须安装的构建依赖项;最好是将工具与相关源代码一起包含(这也意味着没有版本问题,不像autotools有时会发生的情况)。 - al45tair我认为你的问题应该是“有没有一种方法可以从SCons生成XCode项目?”。我猜想,通过你的提问和阅读其他人的回答,答案是否定的。
SCons people应该更清楚。我认为如果你能贡献一个SCons Xcode项目生成器,他们会很高兴。
同时,你可以选择切换到CMake或手动创建你的XCode项目,这可能是最好的实用解决方案,前提是你的源代码树组织良好。
target("test")
add_files("src/*.cpp")
然后你可以选择使用命令行进行构建:
xmake
或者创建一个Xcode项目:
xmake project -k xcode
你可以使用基于Python的构建系统waf来生成XCode项目。你需要下载和安装带有xcode6扩展的waf:
$ 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语法。这里是一个示例,展示了如何配置您的项目:
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
你可以使用Automator为你生成它们。
我检查了一下,没有预先构建的操作。 因此,您需要使用Automator记录您的操作来完成此操作。