АнглийскийФранцузскийИспанский

Ad


Значок OnWorks

makepp_incompatibilities - Онлайн в облаке

Запустите makepp_incompatibilities в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда makepp_incompatibilities, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


makepp_incompatibilities - Несовместимость между makepp и GNU make

ОПИСАНИЕ


Makepp был разработан как можно ближе к GNU make
(<http://www.gnu.org/software/make/manual/make.html>). Автоинструменты GNU
(<http://www.gnu.org/software/automake/manual/automake.html>), CMake
(<http://www.cmake.org/>), Премаке (http://industriousone.com/premake> и смотрите замечание
ниже) или созданные вручную унаследованные системы сборки должны быть собраны с помощью makepp. Это так
вы можете легко переносить проекты. Или если вы не хотите наслаждаться всем
преимущества makepp (например, чтобы другие могли собрать ваш проект с помощью GNU make), пока вы
Воспользуйтесь преимуществом надежности для своего развития.

Однако из-за разницы в философии некоторые make-файлы GNU или POSIX
(<http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html>) особенности не могут быть
поддерживается. Некоторые из них не были реализованы, потому что у нас не было времени. Большинство из
отличия от GNU make носят технический характер и редко вызывают проблемы. Увы
обходные пути для устранения недостатков традиционных производителей становятся все более сложными,
и доставляем makepp тяжелые времена.

Вкратце, если он не собирается из коробки, попробуйте:

makepp --no-warn makepp_simple_concatenation = 1 makepp_percent_subdirs = 1 \
--build-check = target_newer --last-chance-rules --no-remake-makefiles

Если это удастся, вы можете попытаться устранить эти аргументы один за другим. Но если это не удастся,
попробуйте добавить:

- традиционный-рекурсивный-сделать

Если это тоже не удается, систему сборки нужно настроить для взаимодействия с makepp. Даже
если некоторые параметры, описанные здесь, делают что-то пригодным для сборки, все же рекомендуется адаптировать
вещи немного, поэтому они становятся совместимыми из коробки с обеими марками.

Принуждение БОЛЕЕ POSIX or GNU сделать совместимость


Вот несколько возможностей командной строки для работы многих устаревших систем сборки.
без модификации. Они заставляют makepp точно имитировать поведение программы make GNU.

Совместимость с помощью домен опции: "--build-check = target_newer"
По умолчанию makepp попытается перестроить все цели, если какая-либо из зависимостей
изменилось с момента последней сборки, или если команда была изменена (см. makepp_build_check для
Детали). Обычно это то, что вы хотите. Однако иногда цель не нужна
быть перестроенным, если он был изменен отдельно от управления makepp (например, путем редактирования
его или запустив программу вручную, чтобы создать файл). Вы можете заставить makepp использовать
традиционный алгоритм make, который перестраивает, только если какая-либо из целей новее, чем
зависимости, добавив эту опцию в командную строку.

Совместимость с помощью домен опции: "--dont-build = config.status"
Есть пакеты, которые пытаются автоконфигурировать себя или делают другие вещи, которые gmake
игнорирует, если вас не просят, например:

config.status: настроить
./config.status --перепроверить

configure: configure.in aclocal.m4
Autoconf

У большинства людей даже не установлен autoconf, поэтому
правила, как и makepp, не сработают. Эта опция предотвращает это, если вы понимаете, что
не строить.

Совместимость с помощью домен опции: "- правила последней возможности"
Правила по умолчанию (правила шаблонов без зависимостей шаблонов) обычно не поддерживаются.
Makepp создает все правила на основе существующих файлов, так что он знает о каждом
файл, который может быть сгенерирован. Увы, таким образом он не знает, как создать экземпляр шаблона.
правило без зависимости от шаблона. Механизм: last_chance частично исправляет это.
Если этого достаточно для устаревших make-файлов, этот параметр позволяет включить его глобально.

Совместимость с помощью домен опции: "--нет-предупреждать"
Это не улучшает результат. Makepp выдаст предупреждающие сообщения для многих вещей
что традиционный Unix make принимает без малейшего колебания. Это потому, что есть
лучшие способы сделать это с помощью makepp. Если эти предупреждения вас раздражают, вы можете отключить их.
с этой опцией.

Совместимость с помощью домен опции: "--гибрид-рекурсивный-сделать"
Рекурсивные вызовы make часто считаются небезопасной практикой (см. «Лучше
система иерархических сборок "в makepp для подробностей), но они чрезвычайно распространены в
существующие make-файлы. Makepp поддерживает рекурсивный make для обратной совместимости; для новых
makefiles, гораздо лучше использовать оператор load_makefile или неявный
Механизм загрузки make-файла.

Чтобы иметь возможность использовать репозитории для вариантных сборок и помочь сделать рекурсивный
вызовы make safer, makepp обычно не вызывает себя рекурсивно
даже если ты скажешь. Вместо этого подпроцесс взаимодействует с родительским процессом и
фактическая сборка выполняется родительским процессом.

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

цель: зависимости
$ (MAKE) -f other_makefile цели

В этом случае makepp замечает, что загружает второй make-файл, и жалуется. С этой опцией
вместо этого он вернется к традиционному способу сборки из дополнительных make-файлов в
отдельный процесс makepp для каждого.

Примечание: технически загрузить несколько make-файлов не составит труда, но обычно они содержат
те же фальшивые имена целей. Если оставить это отдельно, значит полностью переработать makepp.
внутренности. Однако это будет работать, но не эквивалентно:

цель: зависимости
cd subdir && $ (MAKE) -f other_makefile цели

Совместимость с помощью домен опции: "--traditional-recursive-make"
Иногда предыдущего варианта недостаточно, особенно если рекурсивные вызовы используют
противоречивые варианты. Makepp использует только один набор глобальных параметров, поэтому подделка не
разрешено изменять их, так как это также относится к другим make-файлам.

Добавление этой опции в командную строку имеет следующие нежелательные побочные эффекты:

· Рекурсивные операции создания не выполняются внутри параллельно, даже если это делает родительский объект.
В отличие от gmake нет общей координации количества процессов. Это будет
не может быть реализован, потому что такой способ работы не является целью makepp.

· Рекурсивные процессы make ничего не знают о репозиториях.

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

· Поскольку makepp обычно создает больше, чем традиционный make, который считает необходимым, и поскольку многие
системы сборки обеспечивают рекурсивные вызовы во всех направлениях, это может привести к бесконечному
рекурсия. Макепп нажмет на тормоз после 50 раундов и расскажет, как увеличить
что, если у вас действительно такая глубокая вложенность.

Даже с параметром "--traditional-recursive-make" переменные среды
"MAKEOVERRIDES" и "MFLAGS" не настраиваются и игнорируются, поэтому make-файлы, зависящие от
те не будут работать.

A Премейк генерируется Makefile это всего лишь забавная оболочка для вызова sub-make в том же самом
каталог. Если у вас есть цель проекта XYZ у него будет строка вроде

@ $ {MAKE} --no-print-directory -C. -f XYZ.make

В этом случае вы можете избежать опции "--traditional-recursive-make", напрямую вызвав
makepp с этим "-f XYZ.make " опцию.

Совместимость без домен опции: "--jobs =n"
Устаревшие make-файлы иногда не перечисляют все зависимости, полагаясь на порядок
исполнение, чтобы сделать их вовремя. В этой ситуации makepp может вызвать правило до того, как
все его зависимости были сделаны. Тогда результаты могут быть лучше с меньшими затратами или даже без
параллельное исполнение.

Совместимость с помощью домен переменная: "makepp_simple_concatenation = 1"
Подстановка в стиле Rc - это способ по умолчанию makepp выполняет подстановку переменных в текст
строк, потому что он очень редко ломает устаревшие make-файлы и часто используется в новых
make-файлы. Тем не менее, это иногда приводит к несовместимости при замене
переменные без пробелов. Например,

INCLUDE_PREFIX: = -I / some / include / dir -I
ВКЛЮЧАЕТ: = $ (INCLUDE_PREFIX) / other / include / dir

установит для "INCLUDES" значение "-I / some / include / dir / other / include / dir -I / other / include / dir", если rc-
подстановка стилей включена, тогда как GNU make установит для нее значение
«-I / some / include / dir -I / other / include / dir». Например, при компиляции Redis 2.6.5 он пытается
запустите printfgcc. Такое забавное объединение двух команд - явный признак того, что
эта переменная нужна для возврата к семантике.

Также существует несовместимость в обработке пробелов в переменной:

null: =
T: = -o $ (null) # T содержит -o, за которым следует один пробел.
OUTFILE = $ (T) выходной файл

установит "OUTFILE" в "-ooutfile", если включена подстановка в стиле rc, тогда как GNU make
установил бы его в "-o Outfile".

Обе эти несовместимости устраняются установкой "makepp_simple_concatenation"
Переменная. Однако обратите внимание, что даже с "makepp_simple_concatenation" makepp по-прежнему
несовместимо обрабатывает пробелы в некоторых ситуациях:

T: = -o # Не удалять этот комментарий.

GNU make устанавливает "T" таким образом, чтобы он содержал "-o", за которым следует пробел, тогда как makepp удаляет
в любом случае конечное пространство. Если вам нужен конечный пробел, вы должны установить
"makepp_simple_concatenation", а также установите "T", используя технику с использованием манекена.
переменная, такая как "null", как показано выше.

Обходной путь вариант "--no-remake-makefiles"
Типичный открытый исходный код требует вызова «configure» для создания make-файлов. Но тогда эти
make-файлы могут содержать правила для переделки make-файла путем вызова некоторой команды. Макепп будет
с радостью соблюдайте и обновляйте его в соответствии с правилом. Но иногда это вредно, поэтому
просто пропустите это.

Совместимость с помощью домен переменная: "makepp_percent_subdirs = 1"
По умолчанию "%" в шаблонном правиле не соответствует каталогам. Это означает, что такое правило, как
это:

% .o:% .c
$ (CC) $ (CFLAGS) -c $ (ввод) -o $ (вывод)

не будет применяться к файлам типа "../shared/xyz.c". Если вы хотите, чтобы он соответствовал файлам в
подкаталоги, затем установите переменную makepp_percent_subdirs = 1 в командной строке.
или около начала make-файла.

Совместимость с помощью домен охрана окружающей среды переменная: $ MAKEPP_IGNORE_OPTS
Иногда унаследованные рекурсивные вызовы передают параметры, которые makepp не понимает.
Надеюсь, этот параметр не важен, но он предотвращает запуск makepp. С этим
переменную окружения, вы можете попросить makepp молча игнорировать определенные параметры. Значение
должен быть разделенным пробелом списком опций, который может быть в 4 вариантах:

--длинной=x
Длинный вариант, ожидающий аргументов. Этот факт необходимо констатировать через равных.
знак, хотя фактическое использование также может быть разделено пробелом, либо "--long = bla", либо
"--long bla".

--длинной
Долгий вариант без аргументов.

-sx Короткий вариант, ожидающий аргумента. Этот факт необходимо заявить, добавив
что-то сразу после опции, хотя фактическое использование также может быть разделено
пробел, либо «-sbla», либо «-s bla».

-s Короткий вариант без аргументов.

Например, переопределите параметр makepp -R на один без аргументов и примите отладку gmake
вариант с аргументом:

экспорт MAKEPP_IGNORE_OPTS = '- R --debug = x'

Несовместимость который требовать Makefile изменения


· Make-файлы, которые явно вызывают make, не позволяют makepp создавать все самостоятельно.
Увы, Perl "ExtUtils :: MakeMaker" фиксирует вторую из следующих двух форм
эта ошибка до версии 6.56 (Perl 5.12.1):

подкаталог:
cd subdir; делать

MAKE = сделать

· Установка некоторого значения переменной "VPATH" неявно вызывает "vpath% value". "vpath"
операторы эмулируются с помощью механизма репозитория. Итак, где gmake заменяет
путь к файлу, найденному в vpath, makepp вместо этого свяжет его символически с
где это нужно. Таким образом, makepp предоставит неизмененную строку, которая обычно
не проблема.

Цели в vpath не поддерживаются. (Gmake считает их, если они новее, чем
их зависимости, но если нет, цель будет воссоздана в текущем каталоге
- довольно непоследовательно.) Отмена установки vpaths не поддерживается.

· Шаблонное правило, представленное позже в make-файле, переопределяет существующее ранее.
Это назад от GNU make.

· Набор встроенных неявных правил несколько отличается от правил GNU make,
хотя имена переменных в значительной степени совместимы. Встроенные правила должны
успешно компилировать программы на C / C ++ / Fortran и на самом деле может угадать
правильные библиотеки в некоторых случаях тоже. Поддержка Modula-2 и RatFor и других редких
languages ​​намеренно отсутствует, потому что я постоянно сталкивался с проблемами с GNU
make, когда я случайно повторно использовал расширения для этих языков.

· Префикс действия «+» игнорируется.

· Элементы архива не поддерживаются, как и связанные автоматические переменные.
$%, «$ (% D)» и «$ (% F)».

· Нет поддержки SCCS.

· Начальные и конечные пробелы в присвоении переменных игнорируются (даже если
за пробелом следует комментарий). Подробнее об обработке пробелов
несовместимости, см. «Пробелы в переменных» в makepp_variables.

· Makepp не пытается перестроить файлы, включенные с помощью оператора "include", если только
make-файл содержит правило для их создания до того, как будет замечен оператор include.
(Однако он попытается перестроить сам make-файл.) Обычно это используется для
обработка зависимостей включаемых файлов, и это не так полезно с makepp, так как вы не
в любом случае нужно это сделать.

· Переменная "SHELL" в настоящее время частично игнорируется. Makepp всегда использует / Бен / ш
если не / usr / xpg4 / bin / sh or / sbin / xpg4 / sh найден, или если вы не экспортируете "ОБОЛОЧКА"
переменная в вашем make-файле. Но если вы это сделаете, синтаксический анализатор команд может не полностью
понять, что делает ваша команда оболочки. В Windows Strawberry или ActiveState Perl
вместо этого вы должны установить переменную SHELL до вызов makepp.

· Зависимости чего-либо от Makefile по-прежнему работают, но обычно в них нет необходимости.
Обычно это используется для принудительной перестройки при изменении параметров компиляции. Макепп знает
когда команды сборки были изменены без чего-либо особенного в make-файле; он хранит
это файл за файлом. Если вы измените make-файл, он точно знает, какой
файлы нуждаются в перекомпиляции.

· Промежуточные файлы не удаляются. (Поскольку makepp настаивает на том, чтобы весь файл
даты должны быть такими же, как и в последней сборке, все промежуточные файлы должны быть
в настоящее время, иначе произойдет перестройка.) Особого статуса нет.
промежуточные файлы.

· Единственная поддерживаемая специальная цель - это «.PHONY» и частично «.SUFFIXES». В
остальные просто заглатываются.

В частности, GNU make имеет следующие особые цели:

. СУФФИКСЫ
Makepp игнорирует ".SUFFIXES" за исключением специального случая ".SUFFIXES" без
зависимости, например:

. СУФФИКСЫ:

что говорит ему не загружать ни одно из своих правил по умолчанию.

.ПРОМЕЖУТОЧНЫЙ, .ВТОРИЧНЫЙ, .ДРАГОЦЕННЫЙ
Промежуточным файлам не предоставляется никакого специального статуса, поэтому эти цели не
осмысленный.

.ИГНОРИРОВАТЬ
Эта цель игнорируется. Если вы хотите игнорировать ошибки, укажите слово ignore_error.
(или знак минус) перед командой, статус выхода которой следует игнорировать.

.ТИХИЙ
Эта цель игнорируется. Если вы хотите, чтобы команды не отображались эхом, укажите слово «noecho»
(или символ "@") перед командой, которая не должна повторяться,
или используйте параметр "--silent" для makepp.

.DELETE_ON_ERROR
.EXPORT_ALL_VARIABLES
.НОЭКСПОРТ
.POSIX
.ПО УМОЛЧАНИЮ
Эти цели не поддерживаются и просто игнорируются.

· Функции make GNU "eval", "аромат" и "значение" в настоящее время не поддерживаются. Ты
можно добиться того же, что и eval, более простым способом с помощью "$ [...]"
расширение переменной или функции.

· Правила двойного двоеточия не полностью поддерживаются. (Их не может быть: в парадигме makepp
не может быть более одного способа обновить цель.) В настоящее время каждый последующий
правило двойного двоеточия для данной цели просто добавляет свою командную строку и зависимость
list в командную строку и список зависимостей для этой цели. Например, если вы
напишите это:

а :: б
& кошка b -oa

# Позже в вашем make-файле:
а :: с
& cat c -o >> a

это точно, так же, как если бы вы написали

а: до н.э.
& кошка b -oa
& cat c -o >> a

Это определенно не то, для чего предназначены правила двойного двоеточия, и не всегда
работают, но он работает для таких целей, как "чистый", или для всего, что
ExtUtils :: MakeMaker помещает в свои make-файлы. Не рассчитывай на это ни на что другое
чем устаревшие make-файлы.

· Функция "$ (подстановочный знак)" сопоставляет не только существующие файлы, но и файлы, которые
еще не существуют, но у которых есть правило, которое makepp видел в то время, когда
Функция "$ (подстановочный знак)" оценивается.

· Оператор "define" поддерживается, но обработка предшествующего ему символа "@" выполняется
иначе. В настоящее время в makepp символ "@" перед переменной, имеющей многострочную
value подавляет только эхо первой строки. Например,

определить эхолинии
& echo line1 -o $ @
& echo line2 -o >> $ @
Endef

x:
@ $ (эхо-линии)

не будет подавлять вывод "& echo line2", как в GNU make; это будет только
подавить печать «& echo line1».

· Makepp не поддерживает следующие переменные среды (не настраивает их,
и просто игнорирует их):

МАКЕОВЕРРИДЫ
МФЛАГС

Несовместимость in заказ of выражение расширение
· В makepp действия правил расширяются до того, как все зависимости гарантированно будут
были построены. Вы можете обойти это, изменив такие правила:

фу: бар
genfoo <$ (оболочка cat bar)

к этому:

фу: бар
genfoo <`cat bar`

или это, что сделает файл во время расширения:

фу: бар
genfoo <$ (& cat $ (сделать бар))

Здесь это предпочтительнее, потому что файл, указанный в бар также является зависимостью от этого
rule, и makepp теперь может его поймать при лексическом анализе перенаправления.

· Хотя я не видел, чтобы это использовалось, GNU make позволяет следующее:

двоеточие =:
a $ (двоеточие) b
эхо $ ^

Makepp раскрывает "$ (двоеточие)" слишком поздно, чтобы это сработало. Однако он предлагает
альтернативный синтаксис "$ [двоеточие]", который может гораздо больше, чем GNU make, потому что он
расширился очень рано.

"$ (СДЕЛАТЬ)" май включают пространства
Если makepp не установлен или платформа не поддерживает запуск сценария Perl
по магическому числу или с помощью "--traditional-recursive-make" эта переменная будет включать как минимум
одно пространство. Это не проблема при использовании его как команды. Но при передаче его как
параметр сценария без кавычек (как это делает система сборки Perl 5.14.0), он разорвет его
на отдельные параметры, что приводит к путанице. Так что в качестве параметра безопаснее
процитируйте его как «$ (СДЕЛАТЬ)». что не нарушает обратную совместимость.

Целевой Назначения не Распространить
Переменные Makepp для конкретных целей немного отличаются от переменных GNU make в том, что они
применяется только к правилу для одного упомянутого файла, а не к любому из его предшественников; видеть
Целевые задания.

Скобки or подтяжки не гнездо
Makepp заканчивает выражения первой соответствующей круглой или фигурной скобкой. Вместо этого

$ (somefunction ... () ...) # GNU make style

вы должны использовать любой из этих

$ {somefunction ... () ...} # GNU делает совместимым
$ ((somefunction ... () ...)) # Расширение Makepp

Вероятно, это будет исправлено в версии 2.1, возможно, при желании.

Незначительный пунктов
Зависимости шаблонов не соответствуют фальшивым целям
% .a:% .b; ...
$ (фальшивый xb):; ... # не позволяет построить xa

Комментарии не имеют продолжения
# Это \
НЕ двухстрочный комментарий

Command линия несовместимость


Makepp поддерживает несколько более полезных параметров командной строки make. Однако следующие
не поддерживаются:

-d или --debug
-ф -
Внутренние объекты make-файла Makepp связаны с файловыми объектами, поэтому он не может обрабатывать
стандартный ввод.

-i
-l или --load-average или --max-load
-m Параметр «-m» Makepp имеет отношение к выбору метода подписи, тогда как GNU make
игнорирует -m.

-p или --print-data-base
-q или --question
-R или --no-builtin-variables
Параметр «-R» Makepp на самом деле делает что-то совершенно другое.

-S --no-keep-going или --stop
Опция "--stop" останавливает (переводит в спящий режим) makepp после изучения всех правил, поэтому вы
можно продолжить редактирование.

-t или --touch
-w или --print-directory
Это происходит автоматически.

--warn-undefined-переменные

Некоторые из них могут быть легко поддержаны, если кому-то интересно.

Технология несовместимость


Makepp ищет в $ PATH соответствующую команду, чтобы вернуть такие переменные, как «$ (CC)» или
"$ (CXX)", в то время как GNU make имеет статические значения по умолчанию. Также makepp отдает предпочтение "gcc" и
"g ++", в то время как GNU make на удивление возвращает "cc" для первого, но то же самое для
последний. Вы можете переопределить их в make-файле, в командной строке или путем экспорта
одноименная переменная перед вызовом makepp.

Используйте makepp_incompatibilities онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad