在日常工作中,我們會在虛擬機下的x86系統進行架叉編譯,有時需要在arm上直接進行編譯。但工程都是一樣的,只是Makefile不一樣,這時就涉及到Makefile的靈活運用了。以下是一個自動識別編譯環境的通用Makefile:
TARGET_ARCH1 := arm
ifneq ($(shell uname -m | grep -c 'x86'), 0)TARGET_ARCH1 := x86
endififeq ($(TARGET_ARCH1),arm)CXX = g++CC = gcc
elseCXX = arm-linux-gnueabihf-g++CC = arm-linux-gnueabihf-gcc
endifSRC = $(wildcard ./*.c) #wildcard把指定目錄>下的所有后綴是cpp的文件全部展開
OBJS=$(patsubst %.c,%.o,$(SRC)) #所有.o的變量all:$(TARGET) target
permission:@chmod 777 run.sh$(TARGET):$(OBJS)@echo Linking $(notdir $@)@$(CXX) -rdynamic -o $@ $^ $(LIBPATH) $(LIBVAR) #rdynamic%.o:%.cpp@echo Compiling $<@$(CXX) $(CFLAGS) -c $< -o $@ -fpermissive.PHONY:clean
clean:rm -rf ./$(TARGET)rm -rf ./*.o