Это команда jmake, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
jmake - общий конструктор make-файлов
СИНТАКСИС
сделать [ CPP кредита ]
ОПИСАНИЕ
Джеймаке строит make-файл из описания довольно высокого уровня, хранящегося в Jmakefile .
Созданный файл представляет собой Makefile.SH а не простой make-файл, что означает, что он готов
будет использоваться вместе с метаконфиг. В частности, такие параметры, как "куда
установить исполняемые файлы "будет автоматически определен Настроить и только необходимое
параметры будут учтены.
Использовать сделать ты должен написать Jmakefile во-первых, в котором описывается, как все должно быть
построен. Ваш Jmakefile будут включены в общий шаблон через предварительную версию C
процессор. Это означает, что вы можете использовать обычные комментарии C / ** /, но не оболочку #
Комментарии. Комментарии C не появятся в сгенерированном Makefile.SH но строки начинаются
with; # наконец появится в виде комментариев оболочки. Если вам нужно написать строку / * в
генерируется Makefile.SH тогда вы должны убежать от него (иначе сделать будет думать об этом как о
начало комментария C). Просто поставьте # перед *, как в / # *.
В вашем распоряжении набор макросов, и все эти макросы перечислены в указателе
файл вместе с фрагментом кода, в который они будут расширяться. Обычно Jmakefile довольно
маленький и, следовательно, более простой в обслуживании, чем огромный Makefile. Некоторые внутренние мощные команды
позволяют легко писать переносимые make-файлы, не затрачивая много усилий,
потому что кто-то уже сделал эту работу за вас :-).
Когда вы хотите сгенерировать свой make-файл, вы обычно не запускаете сделать но используйте jmkmf
сценарий, который является оболочкой и будет вызывать сделать с правильными вариантами.
Все знания о сделать хранится в двух файлах: шаблон Jmake.tmpl и макрос
файл определения Jmake.правила. Первый файл включает второй вместе с
Jmakefile. Иногда необходимо знать, как все работает, чтобы правильно использовать
все предоставленные функции. Например, вам, возможно, придется написать свои собственные правила для
конкретный проект. Хотя вы не можете перезаписать предопределенные правила, вы можете расширить
Jmake.rules файл или просто добавьте свои макросы в свой Jmakefile. Вы также можете использовать #включают
операторы, если вы хотите поделиться этими макросами и не хотите дублировать код.
Синтаксис Jmake.rules совсем не изящный, но:
- Легко разбирается (как файлы sendmail.cf или troff).
- Правила не должны меняться очень часто.
- Достаточно просто освоить за пять минут. :-)
Вот небольшое описание:
1) Разбираться с различными CPP реализации:
· Окончательный @! \ Означает: конец строки, следующая строка начинается с левого края.
· Конечный @@ \ означает: конец строки, следующая строка должна быть с отступом на одну табуляцию.
В конце каждой строки всегда должно быть одно из символов @! \ Или @@ \. Единственный
исключение составляют макросы, которые должны использоваться как часть тела правила (например,
УдалитьЦелевуюПрограмму). В этом случае первая строка (которая содержит #define) должен
заканчиваться одинарной обратной косой чертой.
2) Определения символов:
·> СИМВОЛ: определяет символ.
· ?УСЛОВНОЕ ОБОЗНАЧЕНИЕ: : держит если определен СИМВОЛ.
· %УСЛОВНОЕ ОБОЗНАЧЕНИЕ: : держит iff SYMBOL не определен.
? SYM может быть вложенным (логическое И), например:
? SYMBOL:% TOKEN: текст
который сохранит текст, если SYMBOL определен, а TOKEN не определен. Для реализации
логическое ИЛИ, см. ниже.
3) Целевые тесты Makefile:
·?цель?: : держит если только цель определяется.
·%цель%: : держит если только цель не определен.
Makefile цель определяется как отдельная цель, например
зависеть. местный цель, которую можно определить как:
зависимость .local:
Также обратите внимание, что это действительно только для определенных целей. so далеко в сгенерированном
makefile. Это не предикат, который можно использовать для проверки целей, которые
в конечном итоге будет определено позже в поколении.
4) Команды:
Команды могут быть переданы сделать. Они начинаются с ведущего символа "|". Доступные команды
составляют:
· | Суффикс : добавляет в список .SUFFIXES: в make-файле.
· | Правило: : добавляет в раздел строительных правил.
· | Правило: : так же, как и раньше, с ведущей табуляцией.
· | Skip: пропускает текст до тех пор, пока не будет найдена строка, начинающаяся с '-skip'.
· | Subst: начало раздела, в котором строки будут подвергаться подстановке переменных,
пока не будет найдено "-subst". Это означает, что при запуске Makefile.SH все
экземпляры $ var в SUBST раздел будет заменен оболочкой.
· | Shell: генерирует секцию до тех пор, пока не совпадет '-shell' как есть в сгенерированном
Makefile.SH. Это может быть полезно для подготовки | дело разделы. Нет
разрешено гнездиться оболочка раздел.
· | Case: после этой команды должно быть указано имя переменной оболочки (без ее
ведущий знак '$') и шаблон стиля регистра, например, строка "var в
f * ". Он будет генерировать соответствующий" case "тест в Makefile.SH на
значение "$ var", и только если этот тест верен, раздел до
соответствующий '-case' генерируется в Makefile при запуске Makefile.SH. Это
возможно гнездо , признали разделы свободно.
· | Развернуть : расширять строки до '-expand' с помощью . Полный
пример показан ниже.
· | Один раз : текст до '-once' появляется только в первый раз.
'|' команды не могут быть вложенными, если не указано иное. В частности, из-за
простая реализация | пропустить, нельзя поставить | пропустить внутри пропущенного
часть. Однако | один раз раздел может иметь | пропустить разделы. Разрешено гнездование
| дело разделы по желанию.
Вот способ реализовать логическое ИЛИ:
/ * Реализует СИМВОЛ или нет ТОКЕН * /
? SYMBOL: text / * Сохраняет текст, если SYMBOL * /
% СИМВОЛ: | пропустить
% TOKEN: text / * Сохраняет текст, если не TOKEN * /
-пропускать
На самом деле это некрасиво, потому что текст должен появляться дважды. К счастью, я сделал
не используйте эту конструкцию. :-)
В самом деле, как вы уже наверняка догадались, лучший способ реализовать логическое ИЛИ
заключается в использовании закона Де Моргана:
not (p или q) <=> не p и не q
/ * Реализует СИМВОЛ или нет ТОКЕН (попытка №2) * /
% СИМВОЛ:? ТОКЕН: | пропустить
text / * Если СИМВОЛ или нет ТОКЕН * /
-пропускать
Кто сказал, что им наплевать на логику? ;-)
Расширение осуществляется с помощью расширять команда. Это было сделано, чтобы избежать некоторых
громоздкие записи в make-файлах, когда вам нужно повторить какие-то глупые строки, которые только
отличаются, например, именами файлов. Давайте сначала посмотрим на пример:
| развернуть панель! foo! б! да нет!
! a ::
эхо! а,! б
-расширять
Затем будут напечатаны два правила, и значения (a, b) для первого будут (foo,
да), на второй (бар, нет). Замена контролируется знаком "!" персонаж.
Если заменяемое слово является частью другого слова, отсоедините его с помощью конструкции ^^
как в:! b ^^ c. Можно использовать макросы Makefile в , И они
будет расширен jmake. Если это не то, что вам нужно, избегайте первого знака "$".
(это escape-файл Makefile, т.е. вы должны удвоить '$', а не ставить перед ним
обратная косая черта). // обозначает нулевое значение подстановки.
Конструкция ^^^ ведет себя как ^^, т. Е. Удаляется, но также удаляет все
следующий пробел после ^^^. Если вы добавите что-то к аргументу макроса,
и этот аргумент макроса был написан с пробелами перед ним, тогда это позволит вам
объединить что-то прямо перед окончательным значением этого аргумента.
Вот еще один пример, показывающий, как можно использовать макрос Expand. это
определяется в Jmake.rules
#define Expand(правило, шаблон) @!
|развернуть шаблон @!
правило @!
-расширять
Итак, мы можем написать в Jmakefile:
| пропустить
A = фу бар
-пропускать
#define Rule @!
$(DIR)/!a^^.o: !a^^.o @@
$(CC) -c !a^^.c @@
$ (MV)! A ^^. O $ (DIR)
Развернуть (Правило, a! $ (A)!)
который будет генерироваться в Makefile.SH:
$ (DIR) /foo.o: foo.o
$ (CC) -c foo.c
$ (MV) foo.o $ (DIR)
$ (DIR) /bar.o: bar.o
$ (CC) -c bar.c
$ (MV) bar.o $$ (DIR)
Объявление «А» было окружено пропускать, чтобы он не появлялся в
сгенерированный Makefile.SH, но он будет учтен сделать для
подстановка в выкройке.
Количество расширений определяется количеством возможных значений для
первый параметр. Если другие параметры имеют меньшее количество заменяемых значений, они получат
пустые.
Можно добавить регулярное выражение в конец -expand. Этот регулярный
выражение будет удалено из последнего набора раскрытий в конце каждой строки.
Также можно выполнять замены в развернутом элементе, используя синтаксис
(если 'f' - это расширенная переменная)! f:= в котором и два обычных
выражения (без пробелов). Шаблон будет заменен узором
(заменяется только первое вхождение).
Наконец, вы можете ссылаться в расширенном разделе на переменные, значение которых вычисляется.
через другое расширение, которое упрощает определение общих Jmake-файлы.
Пример:
SRC = foo.c bar.c
ОБЖ =
| развернуть f! $ (SRC)!
!f:\.c=\.o
-расширять \
ВКЛ =
| развернуть f! $ (OBJ)!
!f:\.o=\.h
-расширять \
который будет генерироваться в Makefile.SH:
SRC = foo.c bar.c
ОБЖ =
фу.о
бар.о
ВКЛ =
фу.ч
бар.ч
Не забывайте защищать специальные символы в регулярных выражениях, например
обратная косая черта, точка и т. д.
The консолидировать команда помечена именем. Когда имя появляется в первый раз,
конструкция игнорируется, и текст до '-once' будет скопирован в сгенерированный
Makefile.SH. Однако будущие появления того же имени будут проигнорированы (консолидировать
будет вести себя как пропускать).
Пример:
| однажды this_is_a_name
-однажды
The оболочка Команда может использоваться для генерации фрагмента оболочки в Makefile.SH. Для
Например, следующий раздел в Jmakefile:
| оболочка
case "$ d_usegtk1" в
определить) glib = 1; gtk = 1 ;;
ESAC
-оболочка
вызовет генерацию вложенного фрагмента в Makefile.SH для вычисления
ценности бойкий и GTK переменные на основе переменной конфигурации
d_usegtk1 устанавливается путем запуска Configure.
В свою очередь, это может быть использовано в последующих , признали разделы для активации частей
Makefile только при сборке для GTK1 с использованием glib-1.x:
| case glib в 1
дисплей:
echo "Сборка для glib-1.x"
-кейс
Этот раздел создаст что-то вроде этого в Makefile.SH:
! НЕТ! ПОДПИСКИ!
case "$ glib" в
1)
$ spitshell >> Makefile << '! NO! SUBS!'
дисплей:
echo "Сборка для glib-1.x"
! НЕТ! ПОДПИСКИ!
;;
ESAC
$ spitshell >> Makefile << '! NO! SUBS!'
А при запуске Makefile.SH указанное выше правило "отображения" появится только тогда, когда
сборка для glib-1.x. Форма финала Makefile поэтому может зависеть от
параметры конфигурации выбираются, когда Настроить был запущен.
5) Инициализации:
· + : Помещает всю строку в раздел инициализации.
· ++ СИМВОЛ : Добавляет к макросу SYMBOL.
6) Пользовательские переменные:
Пользователь может определить CFLAGS, LDFLAGS или DPFLAGS как дополнительные флаги, которые будут использоваться в C
компиляция, фаза компоновки или зависимая цель. Таким образом, можно добавить дополнительные
флаги, такие как -I, или библиотеки для Make-файлов в определенных подкаталогах.
Используйте jmake онлайн с помощью сервисов onworks.net