Разница между LDFLAGS и ldflags-y - PullRequest
0 голосов
/ 10 июля 2019

Документ kbuild гласит:

ldflags-y ... [применяется] только к make-файлу kbuild, в котором они назначены .... [используется] для всех вызовов ld, происходящих во время рекурсивной сборки.

пока

LDFLAGS ... [используется] для всех вызовов компоновщика.

Я не вижу никакой разницы между ними, учитывая Makefile m (и мы набираем make m)

  • предположим, LDFLAGS := x, поскольку он применяется ко всем вызовам компоновщика, тогда все ld, вызванные в любом сеансе сборки, начиная с make m, имеют значение x для LDFLAGS
  • предположим, ldflags-y := y, поскольку, если применяется ко всем рекурсивным вызовам ld, то все ld, вызванные (любым сеансом сборки, начиная с make m), также имеют значение y для LDFLAGS

Правильно ли это истолковано?

Ответы [ 2 ]

1 голос
/ 11 июля 2019

[применяется] только к make-файлу kbuild, в котором они назначены

означает, что флаги ссылки, определенные этой переменной в данном make-файле, используются только в правилах, появляющихся в том же make-файле. Они не наследуются от родительского make-файла, и они не передаются на под-make s, контролируемые другими make-файлами.

[используется] для всех вызовов ld, происходящих во время рекурсивной сборки.

Это утверждение в целом об объекте, а не о конкретных флагах, обозначаемых при каком-либо конкретном использовании этого объекта. В нем говорится, что вы можете использовать переменную ldflags-y в любом make-файле kbuild и ожидать, что поведение, описанное в вызовах docs-linker в правилах, появляющихся непосредственно в том же make-файле, будет использовать эти флаги, но они не будут передаваться автоматически sub- make s в других каталогах.

С другой стороны, это ...

LDFLAGS ... [используется] для всех вызовов компоновщика.

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

Далее в документах говорится, что ldflags-y можно использовать для дальнейшей настройки, которую вы должны указать, чтобы указать и в прогонах компоновщика. Читая немного более внимательно между строк, вы должны ожидать, что (глобальный) LDFLAGS появится в команде компоновщика раньше, чем (локальный) ldflags-y.

Я не вижу никакой разницы между ними, учитывая Makefile m (и мы тип марка м)

  • предположим, LDFLAGS: = x, поскольку он применяется ко всем вызовам компоновщика, тогда все ld, вызываемые в любом сеансе сборки, начиная с make m имеет значение x для LDFLAGS

Да и нет. Общий make-файл kbuild m не должен давать определение для LDFLAGS. Это относится только к соответствующей архитектуре make-файла. Непонятно, что произойдет, если make-файл kbuild сделает так или иначе, но я подозреваю, что он будет каскадно под make s.

Кроме того, вы не должны пытаться напрямую make поддерево, если оно настроено для kbuild. Система не предназначена для этого.

  • предположим, что ldflags-y: = y, потому что если он применяется для всех рекурсивных вызовов ld, то для всех ld, вызванных (при любом запуске сеанса сборки из make m) также имеет значение y для LDFLAGS

Нет. Возможность использовать переменную ldflags-y для обеспечения локальной настройки флага ссылки применяется ко всем make-файлам kbuild. Конкретные флаги, предоставляемые таким образом определенным make-файлом, не касаются до make s.

0 голосов
/ 11 июля 2019

Справка от пользователя Reddit проясняет разницу: на самом деле ldflags-y применяется для ld вызовов происходит в нисходящих сборках, но не для сборок текущего Make-файла. Короче говоря, LDFLAGS определяет верхнюю , тогда нисходящие сборки могут настраивать это значение, используя ldflags-y.

...