#linux #windows #makefile
Вопрос:
Я абсолютный новичок в этой области и в настоящее время изменяю файл Windows makefile для работы в Linux, я использую jenkins для автоматизации, и он имеет следующий псевдокод.
makefile
:
PROJECT=abc.exe UNITS=$(BOXUNIT)xyzcom EXEREF=C:Program filescommon$(PROJECT) all:xyz xyz: @"$(MAKE)" $(MFLAGS) TARGET=WIN32Release$(PROJECT) binary %include ../../boxunit/file.mak
Этот код вызывает файл.mak, который имеет псевдокод ..
file.mak
:
PLATFORM:=$(TARGET,D,D) CONFIG:=$(TARGET,D,B) NAME:=$(TARGET,B) EXT:=$(TARGET,E)
и весь остальной код зависит от этих значений.
Чтобы запустить файл makefile в linux, я внес следующие изменения и создал необходимые каталоги.
PROJECT=abc UNITS=$(BOXUNIT)/xyzcom EXEREF=/home/common/$(PROJECT) all:xyz xyz: "$(MAKE)" $(MFLAGS) TARGET=LINUX64/Release/$(PROJECT) binary include ../../boxunit/file.mak
когда я создаю файл, целевое значение не присваивается значениям в файле.файл мак. Вместо этого значения ПЛАТФОРМЫ,CONIFG и т. Д. пусты, и я получаю ошибки, такие как» все » не существует и «xyz» не существует.
Будет действительно полезно знать, что я делаю правильно или неправильно, и знать, существует ли какой-либо другой лучший подход для этого.
Любая помощь в этом действительно ценится. Заранее спасибо.
Комментарии:
1. Первое, что я бы сделал, это добавил пробел перед
all
списком полномочий :all: xyz
. (Даже если это на самом деле не имеет значения) Далее, добавление строки междуall
иxyz
должно изменить ошибку.2. Также вы можете рассмотреть возможность добавления
.PHONY
. Что-то вроде того.PHONY: all xyz
3. Как необычно.
make
это не обычный инструмент для проектов Windows. Гораздо чаще бывает, что кто-то пытается адаптировать файл макета POSIX к Windowsmake
, чем наоборот.4. Проблема, по-видимому, заключается в синтаксисе
file.mak
. Я не уверен, что$(TARGET,D,B)
, например, должно означать,но я не распознаю синтаксис,если только он не предназначен для доступа к переменной с именем «TARGET, D, B». Какуюmake
реализацию вы используете в Windows?5. Во — первых, вы не установили
BOXUNIT
переменную. Во-вторых, похоже, что исходный файл makefile был файлом nmake, а не файлом make. nmake — это не сделать. Если вы хотите перевести файл создания nmake, чтобы сделать это, вам нужно понять специальные действия, которые делает nmake, такие как (как упоминал Джон Боллинджер) этот специальный синтаксис с запятыми в именах переменных.