#! /usr/bin/env python # encoding: utf-8 from waflib import Task, TaskGen top = '.' out = 'build' APPNAME = 'TestProject' VERSION = '1.0' """ To create the xcode project files: waf configure xcode6 To configure and build using Waf: waf configure build This demo will create an XCode project containing an App bundle target, a dynamic library target, a static library target and an executable target. The generated XCode project can then be opened and XCode can then build those targets. Tested with XCode 8. """ def options(opt): opt.load('compiler_cxx xcode6') def configure(conf): # Use environment variables to set default project configuration # settings conf.env.FRAMEWORK_VERSION = '1.0' conf.env.ARCHS = 'x86_64' conf.env.INSTALL_PATH = '/my/install/path' # The xcode6 tool will also pick up any c config files generated by # the c_config tool, and it'll be added to your project's include path conf.load('c_config') conf.define('NUMBER', 10) conf.write_config_header('config.h') # This must be called at the end of configure() conf.load('compiler_cxx xcode6') conf.env.append_value('CXXFLAGS', ['-O2']) conf.check(cxxflags='-std=c++11', uselib_store='STD11', mandatory=False) def build(bld): # Make .framework targets tg = bld.framework( includes='include', # Source files source=bld.path.ant_glob('src/MyLib/*.cpp'), # If you don't want the source files to appear in a default # 'Source' folder, you can define your own folder structure # using a dictionary, where the key is the desired name of the folder # and the value are the files. group_files={ 'Source files': bld.path.ant_glob('src/MyLib/*.cpp|*.m|*.mm'), 'Include': bld.path.ant_glob(incl=['include/MyLib/*.h'], dir=True), 'Help': ['src/sample.txt'] }, # If you want to ship your header files with your .framework, then # specify them using the 'export_headers' param export_headers=bld.path.ant_glob(incl=['include/MyLib/*.h', 'include/MyLib/SupportLib/*.h']), target='MyLib', # The 'install' param will set the INSTALL_PATH for the # binary, and will also trigger XCode to copy the target to that # path install='~/Library/Frameworks' ) # Make .a static library targets bld.stlib( source=bld.path.ant_glob('src/MyLib/*.cpp'), includes = 'include', target='MyStaticLib', ) # Make standard executable target bld.program( source=['src/test.cpp'], includes='include', target='MyExe', use='MyDynLib STD11' ) # Make .dylib shared libraries bld.shlib( source=bld.path.ant_glob('src/MyLib/*.cpp'), includes='include', target='MyDynLib', ) # Make an app bundle target tg2 = bld.app( source=bld.path.ant_glob('src/*.cpp'), includes='include', target='MyApp', use='MyLib', uselib='SDL2', cxxflags='-DSOME_DEFINE', framework='Cocoa', # Override default setting in a target settings={"Debug": {"CONFIG_NAME": 'Debug'}} )