2016-12-05 159 views
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源文件,而不是忽略它们?

+0

可不可以给的例子你如何在命令行上做到这一点,也许用'foo.cpp'构建'foo.mm'? – Beta

+0

你是什么意思?这是一个makefile。您只需使用“make package install”构建它,然后为您搜索文件并构建/链接它们。但现在它只搜索cpp,我也希望它搜索mm。 –

+0

我认为我看到了问题;您错误地使用了该语言。我想我可以写一个答案。 – Beta

回答

0

您没有给我们足够的信息来重现问题或测试解决方案,因此您可能需要进行一些微调,但这里应该有一个方法。

您已经修改了SRCS := ...行。 一旦你验证了这样的作品,修改OBJS := ...线:

OBJS := $(patsubst %, $(BUILD)/%.o,$(basename $(SRCS))) 

然后一旦你验证了该作品,添加新的规则:

$(BUILD)/%.o: %.mm | $(BUILD)/.dir 
    @echo 'Compile [email protected]' 
    $(_v)$(CXX) $(CXXFLAGS) -MD -MF $(BUILD)/$*.d -c -o [email protected] $<