Makefile условных операторов

0

Сценарий:

Рассмотрим исходный каталог с несколькими ".cpp" файлами, которые создают статическую библиотеку, рассматривают файлы: XYZ.cpp & ABC.cpp (используется в соответствии с описанным ниже условием), а также PQR.cpp, JKL.cpp и т.д. выставляется библиотека name отсутствует.a

Здесь p (- переменная среды), значение которой совпадает с q, тогда out.a должен быть создан с использованием XYZ.cpp else, он должен быть создан с использованием ABC.cpp

Пример: т.е. что-то вроде этого

ifeq($p, q)
SRC = XYZ.cpp
else
SRC = ABC.cpp
endif
SRC += PQR.cpp \
       JKL.cpp \
       MNO.cpp

Как я могу сделать то же самое оптимистично в Makefile?

Заранее благодарю за любую помощь...

Теги:
makefile
gnu-make

2 ответа

1
Лучший ответ

Это почти точно. Вам просто нужно пространство после ifeq (и некоторые круглые скобки вокруг p, если вы хотите использовать имя переменной длиннее одной буквы):

ifeq ($(p), q)
SRC = XYZ.cpp
else
SRC = ABC.cpp
endif
SRC += PQR.cpp \
       JKL.cpp \
       MNO.cpp
  • 0
    Спасибо за прекрасную информацию. Это работает именно так, как я хочу.
0

Хотя бета-ответ вполне корректен, вы можете альтернативно рассмотреть построенные имена переменных. По моему мнению, они приводят к более чистым и понятным файлам. Например:

# if p is not set, default to "default"
p ?= default

q_SRC = XYZ.cpp
default_SRC = ABC.cpp

SRC = $($(p)_SRC) PQR.cpp JKL.cpp MNO.cpp

и т.д. Особенно, если у вас много альтернатив, это может быть намного понятнее (опять же, ИМО).

  • 0
    Тем не менее, это рискует сломаться, если, например, я сделаю make p=xyz , где конструкция if ... else ... по крайней мере все равно назначит какой-то тип по умолчанию, даже если он не правильный .. ,
  • 0
    Вы можете использовать ifeq ($($(p)_SRC),) чтобы увидеть, установлено ли значение; если нет, то вы знаете, что было установлено что-то поддельное. Вы можете использовать либо значение по умолчанию, либо $(error ...) .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню