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