Настройте Makefile, чтобы перекомпилировать файлы, только если они изменились

$('.timepicker').timepicker();

function getDiff() {
  var timeFrom = $('#timeFrom').data('timepicker');
  var timeTO = $('#timeTO').data('timepicker');
debugger;
  var timeFromHH = (timeFrom.hour == 12 && timeFrom.meridian == "AM") ? 0 :
    (timeFrom.hour != 12 && timeFrom.meridian == "PM") ? timeFrom.hour + 12 :
    timeFrom.hour;
  var timeTOHH = (timeTO.hour == 12 && timeTO.meridian == "AM") ? 0 :
    (timeTO.hour != 12 && timeTO.meridian == "PM") ? timeTO.hour + 12 :
    timeTO.hour;

  var timeFromMM = timeFromHH * 60 + timeFrom.minute;
  var timeTOMM = timeTOHH * 60 + timeTO.minute;

  var diffMM = Math.abs(timeTOMM - timeFromMM);
  var diff = Math.floor(diffMM / 60) + "hrs " + (diffMM % 60) + "mins";
  
  $("#diff").text(diff);
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-timepicker/0.5.2/js/bootstrap-timepicker.min.js"></script>

<div class="bootstrap-timepicker">
  <div class="form-group">
    <label>FROM</label>
    <div class="input-group">
      <input id="timeFrom" type="text" class="form-control timepicker">
    </div>
  </div>
</div>


<div class="bootstrap-timepicker">
  <div class="form-group">
    <label>TO</label>
    <div class="input-group">
      <input id="timeTO" type="text" class="form-control timepicker">
    </div>
  </div>
</div>

<button onclick="getDiff()">Get Diff</button>
<label id="diff"></label>

0
задан bits101 19 January 2019 в 18:40
поделиться

2 ответа

Цель build никогда не создается, поэтому команды после нее выполняются каждый раз, когда вы запускаете make (или make all или make build), поэтому программа связывается каждый раз.

Измените цель build так, чтобы она была фальшивой:

.PHONY: build clean

и так, чтобы она зависела от программы, а не от объектных файлов:

build: $(OUTPUT_DIR)\$(OUTFILE).sm8

, а затем правило (рецепт), которое создает программу, если объектные файлы более поздние:

$(OUTPUT_DIR)\$(OUTFILE).sm8: $(OBJECT_FILES)
    $(info ********** Build the Application ***********)
    clnk -m $(OUTPUT_DIR)\$(OUTFILE).map -o $(OUTPUT_DIR)\$(OUTFILE).sm8 $(LINKFILE)
    cvdwarf $(OUTPUT_DIR)\$(OUTFILE).sm8 
    chex -o $(OUTPUT_DIR)\$(OUTFILE).s19 $(OUTPUT_DIR)\$(OUTFILE).sm8

Мне не на 100% ясно, что я выбрал правильный суффикс для программы. Я бы также создал серию макросов, чтобы избежать повторения, которое я вижу:

OUTFILE.sm8 = $(OUTPUT_DIR)\$(OUTFILE).sm8
OUTFILE.s19 = $(OUTPUT_DIR)\$(OUTFILE).s19
OUTFILE.map = $(OUTPUT_DIR)\$(OUTFILE).map

build: $(OUTFILE.sm8)

$(OUTFILE.sm8): $(OBJECT_FILES)
    $(info ********** Build the Application ***********)
    clnk -m $(OUTFILE.map) -o $(OUTFILE.sm8) $(LINKFILE)
    cvdwarf $(OUTFILE.sm8) 
    chex -o $(OUTFILE.s19) $(OUTFILE.sm8)

Кроме того, поскольку я работаю в основном в Unix, я бы использовал / вместо \, но это небольшая деталь .

0
ответ дан Jonathan Leffler 19 January 2019 в 18:40
поделиться

Обновление: Спасибо всем за помощь. Я изменил Makefile, как показано ниже. Вторая проблема теперь исправлена, но первая проблема все еще остается.

Каждый раз, когда вызывается правило сборки, все .c файлы перекомпилируются. Я думал, что компиляция только измененных файлов является основной целью / преимуществом использования make. Так что что-то не так, но, к сожалению, я не нахожу ошибку.

#***************PROJECT INFORMATIONS****************
PROJECT_NAME = stm8template
MODULES = stm8

#****************SET BUILD MODE*********************
ifeq ($(MODE), )
    MODE=Debug
endif

#***************DIRECTORY INFORMATION***************
SRCDIR = src
INCLUDES = includes

#**************HELPER FUNCTIONS*********************
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

#***************FILE SPECIFICATIONS***************
SOURCE_FILES = $(foreach d, $(call rwildcard,$(SRCDIR),*.c), $(notdir $d))
OBJECT_FILES = $(patsubst %.c, %.o, $(call rwildcard,$(SRCDIR),*.c))
HEADER_FILES = $(wildcard $(INCLUDES)/*.h) $(wildcard $(INCLUDES)/**/*.h)
INCLUDE_DIRS_PARAM=$(foreach d, $(MODULES), -iincludes/$d) -iincludes -iC:\Hstm8

#***************COMPILER INFORMATIONS***************
CC = cxstm8
LIBS = -l +mods0
ifeq ("$(MODE)","Debug")
  CFLAGS = $(INCLUDE_DIRS_PARAM) -cl$(OUTPUT_DIR) -co$(OUTPUT_DIR) -pxp -no -pp +debug 
else
  CFLAGS = $(INCLUDE_DIRS_PARAM) -cl$(OUTPUT_DIR) -co$(OUTPUT_DIR) -pxp -no -pp
endif

#***************LINKER INFORMATIONS***************
LINKFILE=$(OUTPUT_DIR)\$(PROJECT_NAME).lkf
LFLAGS = -LC:\Lib

#*******************OUTPUT FILES********************
OUTPUT_DIR = bin/$(MODE)
OUTFILE=$(PROJECT_NAME)
OUTFILE.sm8 = $(OUTPUT_DIR)\$(OUTFILE).sm8
OUTFILE.s19 = $(OUTPUT_DIR)\$(OUTFILE).s19
OUTFILE.map = $(OUTPUT_DIR)\$(OUTFILE).map
TARGET_FILE=$(OUTPUT_DIR)\$(PROJECT_NAME).elf

#*************FLASHER CONFIGURATIONS***************
FLASHER_PATH="C:\Program Files (x86)\STMicroelectronics\st_toolset\stvp\STVP_CmdLine.exe"
DEVICE := STM8S105x6
PORT=USB
PROG_MODE=SWIM
BOARD_NAME=ST-LINK
FLASHER_PARAM = -no_loop

#***************BUILT TARGETS***************
.PHONY: all run build clean
all: build run

%.o: %.c
  $(info ********** Compile [110]lt; ***********)
  $(CC) $(CFLAGS) $(LIBS) [110]lt;

build: $(OUTPUT_DIR)\$(PROJECT_NAME).elf

$(TARGET_FILE): $(OBJECT_FILES)
  $(info ********** Build the Application ***********)
  clnk -m $(OUTFILE.map) -o $(OUTFILE.sm8) $(LINKFILE)
  cvdwarf $(OUTFILE.sm8) 
  chex -o $(OUTFILE.s19) $(OUTFILE.sm8)

run:
  $(info ********** Flashing the Application ***********)
  $(FLASHER_PATH) -BoardName=$(BOARD_NAME) -Device=$(DEVICE) -Port=$(PORT) -ProgMode=$(PROG_MODE) -FileProg="$(OUTPUT_DIR)\$(OUTFILE).s19" $(FLASHER_PARAM) 
0
ответ дан bits101 19 January 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: