Makefile include env file

Многие образы прошивок предоставляются пакетом linux-firmware, который установлен по умолчанию, но вам может потребоваться установить драйвер вашей карты вручную.

Из arch wiki: Чтобы проверить, загружен ли драйвер для вашей карты, проверьте вывод команды lspci -k или lsusb -v, в зависимости от того, подключена ли карта через PCI(e) или USB. Затем проверьте сообщения ядра на наличие загруженной прошивки командой dmesg | grep firmware. Если модуль ядра не загружен, перейдите к разделу Установка драйвера.

27
10.10.2015, 19:28
5 ответов

У меня была аналогичная проблема, и я попал в эту ветку. Другое возможное решение - просто выполнить команду make export без каких-либо аргументов:

include .env
export

Это экспортирует все переменные make как переменные среды. Такое поведение может соответствовать, а может и не соответствовать всем вариантам использования, но оно сработало для меня и не связано с какими-либо мастерами сценариев оболочки.

74
27.01.2020, 19:39

Вот элегантное решение, которое не импортирует переменные Make, но задает любые экспорты среды для подпроцессов оболочки. Лично я предпочитаю, чтобы мои профили были динамическими скриптами.

export BASH_ENV=tools/sh/env.sh

Есть некоторые подводные камни. К сожалению, ENV не работает, я думаю, он должен (, но это проблема Bash, а не Make ). Кроме того, действительно требуется еще одна строка, потому что интерпретатор оболочки Make по умолчанию — /bin/sh.

BASH_ENV := tools/sh/env.sh
SHELL := /usr/bin/bash

На стороне up -это также позволяет включать функции оболочки в сценарии Makefile, но только для сценариев рецептов. Я не знаю, как поживают другие оболочки, кроме Bash. И еще кое-что происходит. Я поместил тестовый файл как GIST .

Можно вообразить множество сложных сценариев оболочки. Мне больше всего нравится этот Q/A за простые ответы.

5
27.01.2020, 19:39

Чтобы завершить предыдущий ответ из meuh, если вы хотите, чтобы файл env был динамическим, вы можете определить функцию настройки.

  • создать env/local-dev.env, env/integ.envфайл с некоторым содержимым
  • определить метод для загрузки этого
    define setup_env
        $(eval ENV_FILE := env/$(1).env)
        @echo " - setup env $(ENV_FILE)"
        $(eval include env/$(1).env)
        $(eval export sed 's/=.*//' env/$(1).env)
    endef

Тогда используйте его

    localDevEnv: ## load env/local-dev.env environment
        $(call setup_env,local-dev)
    integEnv: ## load env/integ.env environment
        $(call setup_env,integ)
5
22.06.2020, 15:42

Если у вас есть bash, вы можете использовать опцию allexportперед загрузкой файла .env.

# sample usage:
#   $ make from-env RECIPE=another-recipe
from-env:
    bash -c 'set -o allexport; source.env; set +o allexport; make "$$RECIPE"'

another-make-recipe:
    printenv
0
06.12.2020, 19:44

пример использования значений.env в Makefile

#!make
include.env

migrateinit:
    migrate create -ext sql -dir mysql/migrations -seq int_schema

migrateup:
    migrate -path mysql/migrations -database "mysql://${DB_USER_NAME}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" -verbose up 1

migratedown:
    migrate -path mysql/migrations -database "mysql://${DB_USER_NAME}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" -verbose down 1
3
04.05.2021, 18:54

Теги

Похожие вопросы