AI-generated Key Takeaways
-
Xcode can be used with external Make files using the External Build System project template.
-
Xcode build settings such as build type and location can be utilized within Make files using conditional directives.
-
Make files can be adapted to function effectively both within Xcode and independently.
-
This setup allows for greater control and flexibility in building projects using j2objc.
External make files can be used with Xcode, using an External Build System project template. These files can be modified to take advantage of Xcode project settings, such as the build type and location, while still useful when used separately.
Create an External Project
To create a new external build project, in Xcode select the New->New Project... dialog, then select the External Build System template. Put the project in the same directory as the target Makefile.
Add Xcode Build Settings
When invoking an external build, Xcode defines environment variables for its build settings. These settings define where build files are created, as well as compiler and linker flags. We use Make's conditional directives to modify the build when it is invoked by Xcode.
Here's an example, where the variables being set (such as BUILD_DIR) can be whatever name you want, while the conditionals use the environment variables Xcode set:
ifdef CONFIGURATION_BUILD_DIR # In Xcode build BUILD_DIR = $(CONFIGURATION_BUILD_DIR)/build ARCHFLAGS = $(ARCHS:%=-arch %) SDKFLAGS = -isysroot $(SDKROOT) else # In command-line build BUILD_DIR = $(HOME)/build ARCHFLAGS = SDKFLAGS = endif ifdef OPTIMIZATION_LEVEL DEBUGFLAGS := $(DEBUGFLAGS) -O$(OPTIMIZATION_LEVEL) endif ifdef OTHER_CFLAGS DEBUGFLAGS := $(DEBUGFLAGS) $(OTHER_CFLAGS) endif # Workaround for iPhoneSimulator SDK's gcc bug ifdef EFFECTIVE_PLATFORM_NAME ifneq ($(EFFECTIVE_PLATFORM_NAME), -iphonesimulator) WARNINGS := $(WARNINGS) -Wreturn-type endif endif J2OBJCC_FLAGS = $(WARNINGS) $(SDKFLAGS) $(ARCHFLAGS) $(DEBUGFLAGS) J2OBJCC = $(J2OBJC_DIST)/j2objcc $(J2OBJCC_FLAGS)