Код Makefile для создания объектов, исполняемых файлов и библиотек


Следующий код работает правильно и компиляции все, что я хочу, чтобы скомпилировать. Он создает все объекты и цели.

Я был обеспокоен, если это наиболее эффективный способ использования файла Makefile. Где в следующем коде я могу пропустить $(LIB)? Вы можете включать и другие полезные советы, чтобы сделать его более эффективным?

CC := g++ # Specify the compiler to use

# Directories and objects
SRCDIR := src
BUILDDIR := build
OBJECTDIR := obj
TARGETDIR := bin
SCRIPTDIR := scripts
TARGETLIB := libmlpackage.so
TARGETLIBFLAG := -lmlpackage

# Initializations
SRCEXT := cpp
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst 
$(SRCDIR)/%,$(OBJECTDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
SCRIPTS := $(shell find $(SCRIPTDIR) -type f -name *.$(SRCEXT))
STARGETS := $(patsubst 
$(SCRIPTDIR)/%,$(TARGETDIR)/%,$(SCRIPTS:.$(SRCEXT)=.out))
CFLAGS := -g
SFLAGS := -Wl,-rpath=./$(BUILDDIR)
LIB := -pthread -L./$(BUILDDIR)
INC := -I include

# Declare targets and prerequisites
all: $(TARGETLIB) $(STARGETS)

$(TARGETLIB): $(OBJECTS)
    @echo "Linking...";
    $(CC) $(CFLAGS) -shared $(INC) $(LIB) -o $(BUILDDIR)/$(TARGETLIB) $^

$(OBJECTDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
    $(CC) $(CFLAGS) -fPIC $(INC) $(LIB) -c -o $@ $<

$(TARGETDIR)/%.out: $(SCRIPTDIR)/%.$(SRCEXT)
    $(CC) $(CFLAGS) $(SFLAGS) $(INC) $(LIB) -o $@ $< $(TARGETLIBFLAG)

# Cleaning
clean:
    @echo "Cleaning...";
    $(RM) -r $(BUILDDIR)/*;
    $(RM) -r $(TARGETDIR)/*;

.PHONY: clean


99
0
задан 10 марта 2018 в 06:03 Источник Поделиться
Комментарии