我一直在编写一个需要为多个平台编译的makefile。现在我只需要为iOS编译,但是我已经知道我需要在不久的将来支持Mac OS X,我也一直在研究如何编译它。请注意,我没有使用Xcode。这不是一个选项,因为该项目还必须支持其他平台。
我已经为iPhone编译了makefile。它正在工作(甚至在模拟器上测试过),但我仍有一些疑问。
具体来说,我已经阅读了很多工具,现在我对其中一些工具感到有些困惑:
最后,我希望我不会偏离主题,我为iphoneos和iphonesimulator生成胖文件。这是怎么回事;首先我为每个平台编译:
ifeq ($(ARCH), iphoneos)
ARCHFLAGS = -arch armv7 -arch armv7s -arch arm64
else
ARCHFLAGS = -arch i386 -arch x86_64
endif
ifeq ($(ARCH), iphoneos)
VERFLAGS = -miphoneos-version-min=7.0
else
VERFLAGS = -mios-simulator-version-min=7.0
endif
CC = $(shell xcrun --sdk $(ARCH) --find clang)
CFLAGS := -isysroot $(shell xcrun --sdk $(ARCH) --show-sdk-path)
CFLAGS += $(ARCHFLAGS)
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
$(CC) $(CFLAGS) -c $< -o $@
省略了一些标志,变量和规则。这会生成两组.o
个文件。然后我使用ar
(应该是libtool
?):
AR = ar
ARFLAGS = crv
$(BINARY): $(OBJECTS) # This rule depends on the previous one
$(AR) $(ARFLAGS) $(BINARY) $(OBJECTS)
到目前为止,每个平台都有一个静态库(.a
)文件。我继续生成胖文件:
$(LIBTOOL) $(LIBTOOLFLAGS) -o $(call libfile,iphone,debug) $(call libfile,iphoneos,debug) $(call libfile,iphonesimulator,debug)
注意:libfile
是一个返回给定配置文件名的函数。
现在有两个问题:
.a
文件的生成并通过指定ARCHFLAGS = -arch armv7 -arch armv7s -arch arm64 -arch i386 -arch x86_64
跳转到fat文件?也就是说,一次通话中的所有平台。这是一回事吗?感谢您阅读目前为止。 最好的。