Директива загрузки
Объекты загружаются в GNU make с помощью директивы load в вашем файле makefile. Синтаксис директивы load следующий:
load object-file …
или:
load object-file(symbol-name) …
Файл object-file динамически загружается GNU make. Если object-file не содержит пути к каталогу, то он сначала ищется в текущем каталоге. Если он не найден там или указан путь к каталогу, то будут просматриваться пути, специфичные для системы. Если загрузка по какой-либо причине завершается неудачей, make выведет сообщение и завершит работу.
Если загрузка проходит успешно, make вызовет функцию инициализации.
Если указано symbol-name, оно будет использоваться в качестве имени функции инициализации.
Если symbol-name не указано, имя функции инициализации создается путем взятия имени файла object-file до первой невалидной для имени символа буквы (буквы, цифры и символы подчеркивания являются допустимыми). К этому префиксу добавляется суффикс _gmk_setup.
С помощью одной директивы load может быть загружено несколько файлов объектов, и оба формата аргументов load могут быть использованы в одной директиве.
Функция инициализации получит имя файла и номер строки вызова операции load. Она должна вернуть значение типа int, которое должно быть 0 при ошибке и не-0 при успехе. Если возвращаемое значение равно -1, то GNU make не будет пытаться перестроить файл объекта (см. Как перестраиваются загруженные объекты).
Например:
load ../mk_funcs.so
загрузит динамический объект ../mk_funcs.so. После загрузки объекта make вызовет функцию (предполагается, что она определена динамическим объектом) mk_funcs_gmk_setup.
С другой стороны:
load ../mk_funcs.so(init_mk_func)
загрузит динамический объект ../mk_funcs.so. После загрузки объекта make вызовет функцию init_mk_func.
Независимо от того, сколько раз файл объекта появляется в директиве load, он будет загружен (и его функция настройки будет вызвана) только один раз.
После успешной загрузки объекта его имя файла добавляется к переменной .LOADED.
Если вы предпочитаете, чтобы неудачная загрузка динамического объекта не сообщалась как ошибка, вы можете использовать директиву -load вместо load. GNU make не завершится с ошибкой и не будет выведено сообщение, если объект не удалось загрузить. Неудачный объект не добавляется к переменной .LOADED, которую можно затем использовать для определения успеха загрузки.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/load-Directive.html