Расширение моего make-файла linux c ++ gnu не ведет себя так, как я ожидал - PullRequest
0 голосов
/ 18 ноября 2018

Я создал следующий небольшой фрагмент make-файла. Примечание: Я сделал это минимальным примером моей проблемы, так что это бессмысленный make-файл.

TARGET = none
OBJ_BASE_DIR = obj

# Linux x86 c++ compiler
.PHONY: build_cpp_x86Linux
build_cpp_x86Linux: TARGET = x86Linux
build_cpp_x86Linux: build

OBJ_DIR = $(addsuffix /$(TARGET),$(OBJ_BASE_DIR))

$(info TARGET IS: $(TARGET))
$(info OBJ_DIR IS: $(OBJ_DIR))

build: $(OBJ_DIR)/test.o
    @echo building, OBJ_DIR: $(OBJ_DIR)

# pattern rule
$(OBJ_DIR)/%.o:
    @echo "compiling $@"

Вот результат вызова make:

TARGET IS: none
OBJ_DIR IS: obj/none
compiling obj/none/test.o
building, OBJ_DIR: obj/x86Linux

Из вывода видно, что он пытается скомпилировать obj/none/test.o, но я хочу, чтобы он попытался скомпилировать obj/x86Linux/test.o. Я не совсем уверен, что здесь происходит. Я думаю, я понимаю, что make-файл расширяет переменные при первом проходе (что приведет к TARGET = none), но я подумал, что он снова расширит переменные, как только я вызову target build_cpp_x86Linux, который устанавливает значение TARGET для x86Linux ...

Что я здесь не так делаю и как это сделать?

1 Ответ

0 голосов
/ 18 ноября 2018

Вы также можете использовать:

TARGET?=none

А затем переопределить в командной строке TARGET = x86Linux

Вы также можете использовать ifdef или другие операции сканирования if для установки различных переменных на основе этих аргументов или переменных среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...