web-dev-qa-db-fra.com

Créer une variable dans un makefile en lisant le contenu d'un autre fichier

Comment puis-je créer une variable à la volée à partir de makefile, dont la valeur serait le contenu entier d'un autre fichier de données.

56
Srinath

Je suppose que vous aimez définir une variable dans votre Makefile au contenu d'un autre fichier:

FILE=test.txt
VARIABLE=`cat $(FILE)`

target:
    echo $(VARIABLE)
35
bb-generation

En supposant GNU make:

file := whatever.txt
variable := $(Shell cat ${file})
62
Maxim Egorushkin

GNU make version 4.2 prend en charge l'opération de lecture de fichiers, donc en ce qui concerne la grande réponse de Maxim Egorushkin , il existe maintenant un moyen facultatif de résoudre ce problème:

FILE     := test.txt
variable :=$(file < $(FILE))
18
yurimz

cat n'existe pas sous Windows. Solution qui fonctionne pour Linux et Windows:

cat := $(if $(filter $(OS),Windows_NT),type,cat)
variable := $(Shell $(cat) filename)

Explication: Il semble que sous Windows, il existe toujours une variable d'environnement OS définie pour être égale à 'Windows_NT'. De cette façon, pour Windows type commande est utilisée, pour non-Windows cat est utilisée.

12
Pavel

Beaucoup plus simple depuis l'ajout de $(file op filename):

VARIABLE = $(file < my_file.txt)

Page de manuel ici: https://www.gnu.org/software/make/manual/html_node/File-Function.html#index-file_002c-reading-from

7
gatopeich

Si vous utilisez GNU make, une autre façon d'obtenir cet effet est d'utiliser une make "include" d'un autre makefile:

De Makefile:

include "./MyFile.mak"

Créez un fichier "MyFile.mak" avec du contenu:

FILE := "my file content"
FILE += "more content 1"
FILE += "more content 2"
3
Bill Moore

Comme la plate-forme n'a pas été spécifiée, voici comment cela fonctionne sur Solaris:

VERSION:sh = cat VERSION

all:
        echo $(VERSION)
3
ceving