Условное включение вложенных Make-файлов на основе теста ifeq - PullRequest
0 голосов
/ 11 июля 2019

Есть ли способ условно включить вспомогательный Make-файл, основанный на результате теста ifeq, как предложено ниже

CC = g++
CENTOS_VERSION := $(shell rpm -E %{rhel})   

TARGET = main

$(TARGET): $(TARGET).cpp
ifeq ($(CENTOS_VERSION),6)
    @echo "Building on CentOS 6"
    include(CentOS6_Makefile.mk)
else
    @echo "Building on CentOS 7"
    include(CentOS7_Makefile.mk)
endif
    $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).cpp

Это не работает и генерирует сообщение об ошибке

Building on CentOS 6
include(CentOS6_Makefile.mk)
/bin/sh: -c: line 0: syntax error near unexpected token `CentOS6_Makefile.mk'
/bin/sh: -c: line 0: `include(CentOS6_Makefile.mk)'
make: *** [main] Error 1

На основании ответа @MadScientist решение моей проблемы сводится к двум строкам

CENTOS_VERSION := $(shell rpm -E %{rhel})
include CentOS$(CENTOS_VERSION)_Makefile.mk

1 Ответ

1 голос
/ 11 июля 2019

Ваша проблема не связана с ifeq;если вы удалите ifeq и всегда включите одно или другое, вы увидите ту же проблему.

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

include CentOS6_Makefile.mk

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

Вы можете сделать это:

CENTOS_VERSION := $(shell rpm -E %{rhel})   
ifneq ($(CENTOS_VERSION),6)
    CENTOS_VERSION := 7
endif

include CentOS$(CENTOS_VERSION)_Makefile.mk

$(TARGET): $(TARGET).cpp
        @echo "Building on CentOS $(CENTOS_VERSION)"
        $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).cpp
...