Независимый от платформы Makefile - Windows и WSL - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь написать Makefile верхнего уровня, который войдет в каталог и использует make.exe, присутствующий в нем, для создания цели.Проект основан на Eclipse на основе SDK производителя (следовательно, комплектация make-файла).Я хотел создать универсальный Makefile, который мог бы работать как на Windows cmd, так и на WSL (Windows Linux).Я был в состоянии заставить его работать индивидуально, но я не уверен, как заставить это работать независимо от того, кто использует какую платформу для запуска этого make-файла.

Для Windows вот что сработало:

all:
     cd DIR && make.exe TARGET

Вкл. WSL , я использую эту команду:

all:
    cd DIR && ./make.exe TARGET

Я должен был сделать это, так как вложенный make-файл проверяет, является ли используемый двоичный файл действительно связанным, иначе выдает ошибку.Как я могу сделать этот Makefile универсальным?

1 Ответ

1 голос
/ 15 марта 2019

Вам может понадобиться, чтобы Makefile определял, на какой платформе он используется, и выполнял отдельные команды.Вот как вы можете это сделать.

ifeq '$(findstring ;,$(PATH))' ';'
    UNAME := Windows
else
    UNAME := $(shell uname 2>/dev/null || echo Unknown)
endif

Переменная UNAME установлена ​​в Linux, Windows или Unknown.Затем его можно сравнить в оставшейся части файла Makefile для разделения любых переменных и команд, чувствительных к ОС.

Ключ заключается в том, что Windows использует точки с запятой для разделения путей в переменной PATH, тогда как Linux использует двоеточия.

Конечно, требуется GNU make или другая make, которая поддерживает используемые функции.

Я разместил более полную версию этого решения, которая обрабатывает Cygwin и MSYS2 здесь .

...