2016-12-05 3 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 линия:

SRCS := $(shell find -E . -regex “.*\.\(cpp\|mm\)”) 

Мой вопрос, что еще я могу сделать, чтобы сделать эту сборку .mm исходных файлов с .cpp исходными файлами, а не игнорированием их?

+0

Не могли бы вы привести пример как вы это сделали бы в командной строке, возможно, создав 'foo.mm' с' foo.cpp'? – Beta

+0

Что вы имеете в виду? Это make-файл. Вы просто создаете его с помощью «make install 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] $< 
Смежные вопросы