Я пытаюсь оптимизировать наши цели сборки. В нашем текущем процессе у нас есть отдельные цели для 32-битной и 64-битной сборки. Из-за отдельных целей у нас есть сотни целей в нашем процессе сборки. Где мы пытаемся сделать его глобальным, то есть одной целью для 32-битной и 64-битной сборки. Я пытаюсь добиться этого с помощью кода ниже.
Целевой / выходной каталог для 32-битной сборки должен выглядеть следующим образом:
/test/scratch/<client_name>/Linux/...
Целевой / выходной каталог для 64-битной сборки должен выглядеть следующим образом:
/test/scratch/<client_name>/Linux-64bit/...
Таким образом, основываясь на вышеуказанных путях к целевому каталогу, я ищу строку Linux
с использованием функции $(findstring)
и продолжаю выполнение 32-битной команды. В противном случае он запускает 64-битную команду, как показано ниже.
RELEASE_FILES := $(TARGET_DIR)/build/test/csimtime.c
$(RELEASE_FILES): $(TGTDIRFILES)/%: %
ifneq (Linux,$(findstring $(OS),$@))
$(test_lib_32)
else
$(test_lib_64)
endif
$(TARGET_DIR)
переменная передается в качестве параметра для создания команды
make TARGET_DIR=$(TGT32) all32
Для 64-битных мы передадим TARGET_DIR=$(TGT64)
.
Примечание: test_lib_32 / 64 выше - определение макроса в другом файле make, который мы включаем в текущий файл make.
Работает нормально, как и ожидалось, но я не уверен, что это лучший способ? И здесь я замечаю одну проблему: обычно переменная TGT32
/ TGT64
, которую мы передаем, имеет значения:
/test/scratch/<client_name>/Linux/ (for 32bit)
или
/test/scratch/<client_name>/Linux-64bit/... (for 64bit)
Если кто-то создаст клиента со строкой client_name 'Linux', он не будет работать. Он всегда будет идти в блок if
и пытаться запустить 32-битную команду, даже когда мы запускаем 64-битную сборку. Как я могу справиться с этим?
Я ищу строку после 'client_name' в указанном выше пути. Не могли бы вы помочь?