Make: Как я могу изменить путь к файлу, который соответствует определенному шаблону - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в GNUmake.

У меня есть требование заменять пути к файлам на основе определенных условий.

TARGET_EXCEPTION := /home/ip/lib_build
TGT_TOOLS := /demo/build/new_project
ifdef SET_BUILD
 ifneq (0,$(RELEASE))
   FILES += $(addprefix $(TARGET_EXCEPTION)/tools/test/,$(subst $(TGTTOOLS)/tools/test/,,$(RELEASE_FILES)))
 endif
endif

Переменная RELEASE_FILES имеет несколько назначенных путей к файлам. Из этих файлов меня интересуют только папки с $ (TGT_TOOLS) / tools / test / и заменой его на $ (TARGET_EXCEPTION) / tools / test / .. Что-то не так в моем коде выше? Пожалуйста, помогите!

1 Ответ

0 голосов
/ 01 октября 2019

У меня есть требование заменить пути к файлам на основе определенного условия.

Я полагаю, что фактическое требование, скорее всего, больше похоже на то, что "тесты должны быть установлены в каталоге, названном $(TARGET_EXCEPTION) в сборке релиза, но в каталоге, названном * 1006. * Различие важно, потому что это более понятно и более портативно, если просто назначить путь в первую очередь.

Это может выглядетьчто-то вроде этого:

# Possible test install locations
TARGET_EXCEPTION := /home/ip/lib_build
TGT_TOOLS := /demo/build/new_project

####
#
# Determine which location to use
#

ifdef SET_BUILD
  TEST_INSTALL_RELEASE := $(RELEASE)
else
  TEST_INSTALL_RELEASE := 0
endif

ifneq (0,$(TEST_INSTALL_RELEASE))
  TEST_DIR := $(TARGET_EXCEPTION)
else
  TEST_DIR := $(TGT_TOOLS)
endif

#
####

# Define the release files in the desired location from the start
RELEASE_FILES := \
  # ...
  $(TEST_DIR)/tools/test/test1 \
  $(TEST_DIR)/tools/test/test2 \
  # ...

# No substitution needed; the targets are already named correctly
FILES += $(RELEASE_FILES)

Что-то не так в моем коде выше?

Он пытается реализовать плохой подход. Кроме того, он вполне может не взаимодействоватькак вам требуется с правилами вашего make-файла, относящимися к затронутым файлам. Вышеприведенное также может иметь последнюю проблему, но в этом случае есть и ясное решение: ссылаться на затронутые файлы везде по формату имени, указанному в примере.

...