0
我想更改我的Makefile以构建cpp和mm文件,因为我刚开始将Objective-C代码添加到我的项目中。这是Makefile文件我目前:更改Makefile中的构建规则以构建多个文件类型
# Name of the project being built
PROJECT := modpe
# Name of process the tweak is loaded into
PROCESS := minecraftpe
# Local IP Address of device to SSH into
DEVICE := ryans-ipod-touch.local
# Path of the SDK on MacOS
SDKPATH := /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
# Build using libc++ and C++11 support
override CXXFLAGS += -stdlib=libc++ -std=c++11 -miphoneos-version-min=7.0 -isysroot $(SDKPATH)
override LDFLAGS += -stdlib=libc++ -std=c++11 -miphoneos-version-min=7.0 -isysroot $(SDKPATH)
# Names of the tweak library, substrate filter, and debian package
TWEAK := $(PROJECT).dylib
FILTER := $(PROJECT).plist
DEB := $(PROJECT).deb
# Directory for build products like executables, object files, and dependency files
BUILD := build
# Directory for debian package filesystem layout
LAYOUT := layout
# Directory for temporary staging of the debian package structure while creating the package
STAGING := $(BUILD)/deb
SUBSTRATE := $(STAGING)/Library/MobileSubstrate/DynamicLibraries
# Name of the unstripped version
UNSTRIPPED := $(BUILD)/$(TWEAK:.dylib=_unstripped.dylib)
# List of source files and their corresponding object file paths
SRCS := $(shell find . -type f -name '*.cpp')
OBJS := $(addprefix $(BUILD)/,$(SRCS:.cpp=.o))
# Supported architectures
ARCHS := arm64
ARCHFLAGS := $(addprefix -arch ,$(ARCHS))
# Frameworks for linking
FRAMEWORKS := CydiaSubstrate Forklift
override LDFLAGS += $(addprefix -framework ,$(FRAMEWORKS))
# Compiler and linker
CLANG := clang $(ARCHFLAGS)
CLANGXX := clang++ $(ARCHFLAGS)
CC := $(CLANG)
CXX := $(CLANGXX)
LD := $(CLANGXX)
STRIP := strip
# When invoked as "make VERBOSE=1", every command gets printed as it runs
ifdef VERBOSE
_v :=
else
_v := @
endif
### Build rules ###
all: $(TWEAK)
.PHONY: all
$(TWEAK): $(UNSTRIPPED)
@echo 'Strip [email protected]'
$(_v)$(STRIP) -x -o [email protected] $<
%.dylib: $(OBJS)
@echo 'Link [email protected]'
$(_v)$(LD) $(LDFLAGS) -dynamiclib -o [email protected] $^
%.cpp: $(BUILD)/%.d
$(BUILD)/%.o: %.cpp | $(BUILD)/.dir
@echo 'Compile [email protected]'
$(_v)$(CXX) $(CXXFLAGS) -MD -MF $(BUILD)/$*.d -c -o [email protected] $<
.SECONDARY: $(BUILD)/.dir
-include $(BUILD)/*.d
### Package rules ###
package: $(DEB)
.PHONY: package
$(DEB): $(TWEAK) $(FILTER)
@echo 'Stage [email protected]'
$(_v)rm -rf $(STAGING)
$(_v)mkdir -p $(STAGING)
$(_v)cp -R $(LAYOUT)/* $(STAGING)
$(_v)mkdir -p $(SUBSTRATE)
$(_v)cp $^ $(SUBSTRATE)
$(_v)chown -R root:wheel $(STAGING)
$(_v)chmod 0755 $(SUBSTRATE)/$(TWEAK)
$(_v)chmod 0644 $(SUBSTRATE)/$(FILTER)
@echo 'Package [email protected]'
$(_v)dpkg-deb -Zgzip -b $(STAGING) [email protected]
$(_v)rm -rf $(STAGING)
### Install rules ###
install: $(DEB)
@echo 'Install $(DEB)'
scp $(DEB) [email protected]$(DEVICE):/var/tmp/
@echo ‘Run dpkg -i /var/tmp/$(DEB) to install.’
ssh [email protected]$(DEVICE)
.PHONY: install
### Offline install rules ###
offline:
@echo 'No WiFi to SSH: Using afc instead'
$(_v)sudo afc/afcclient put ./modpe.deb /modpe.deb
.PHONY: offline
### Clean rules ###
clean:
@echo 'Remove $(BUILD)'
$(_v)rm -rf $(BUILD)
.PHONY: clean
### General rules ###
%/.dir:
@echo 'Create directory $*/'
$(_v)mkdir -p $* && touch [email protected]
# deploys test script
deploy: $(OFFLINE)
scp scripts/script.js [email protected]$(DEVICE):/var/mobile/modpe/
.PHONY: deploy
到目前为止,我知道改变的唯一事情是索马里红新月行:
SRCS := $(shell find -E . -regex “.*\.\(cpp\|mm\)”)
我的问题是,还有什么我可以做,使此版本.mm源文件与 .cpp源文件,而不是忽略它们?
可不可以给的例子你如何在命令行上做到这一点,也许用'foo.cpp'构建'foo.mm'? – Beta
你是什么意思?这是一个makefile。您只需使用“make package install”构建它,然后为您搜索文件并构建/链接它们。但现在它只搜索cpp,我也希望它搜索mm。 –
我认为我看到了问题;您错误地使用了该语言。我想我可以写一个答案。 – Beta