Переменные Makefile для Windows и Linux: несколько методов с примерами кода

Чтобы создать Makefile, который по-разному обрабатывает переменные для Windows и Linux, вы можете использовать условную логику, основанную на операционной системе. Вот несколько методов с примерами кода:

Метод 1: использование директивы ifeqв GNU Make

ifeq ($(OS),Windows_NT)
    # Windows-specific variables and commands
    CC = cl
    CFLAGS = /O2 /Wall
else
    # Linux-specific variables and commands
    CC = gcc
    CFLAGS = -O2 -Wall
endif
all:
    $(CC) $(CFLAGS) main.c -o myprogram

В этом методе директива ifeqиспользуется для проверки значения переменной среды OS. В Windows это значение будет Windows_NT, а в Linux оно будет пустым. Затем вы можете установить различные переменные и команды в зависимости от операционной системы.

Метод 2: использование директивы ifdefв GNU Make

ifdef SystemRoot
    # Windows-specific variables and commands
    CC = cl
    CFLAGS = /O2 /Wall
else
    # Linux-specific variables and commands
    CC = gcc
    CFLAGS = -O2 -Wall
endif
all:
    $(CC) $(CFLAGS) main.c -o myprogram

В этом методе директива ifdefиспользуется для проверки того, определена ли переменная среды SystemRoot. В Windows эта переменная всегда установлена, а в Linux она не определена. Вы можете использовать это условие, чтобы различать две операционные системы.

Метод 3: использование функции $(shell)в GNU Make

UNAME := $(shell uname)
ifeq ($(UNAME),Windows_NT)
    # Windows-specific variables and commands
    CC = cl
    CFLAGS = /O2 /Wall
else
    # Linux-specific variables and commands
    CC = gcc
    CFLAGS = -O2 -Wall
endif
all:
    $(CC) $(CFLAGS) main.c -o myprogram

В этом методе функция $(shell)используется для выполнения команды uname, которая возвращает имя текущей операционной системы. В Windows это будет Windows_NT, а в Linux — Linuxили аналогичный. Затем вы можете использовать это значение для установки различных переменных и команд.