Créer une variable dans un fichier Make en lisant le contenu d’un autre fichier

Comment créer une variable à la volée à partir de makefile, dont la valeur correspondrait à l’intégralité du contenu d’un autre fichier de données.

Je suppose que vous aimez définir une variable dans votre Makefile sur le contenu d’un autre fichier:

FILE=test.txt VARIABLE=`cat $(FILE)` target: echo $(VARIABLE) 

En supposant que GNU fasse:

 file := whatever.txt variable := $(shell cat ${file}) 

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, la variable d’environnement du OS soit toujours définie sur «Windows_NT». De cette façon, pour Windows, la commande de type est utilisée, pour les non-Windows cat est utilisé.

GNU make version 4.2 prend en charge les opérations de lecture de fichiers. En ce qui concerne la réponse de Maxim Egorushkin , il existe un moyen facultatif de résoudre ce problème maintenant:

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

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

 VERSION:sh = cat VERSION all: echo $(VERSION) 

Beaucoup plus simple puisque $(file op filename) été ajouté:

 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

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

De Makefile:

 include "./MyFile.mak" 

Créez un fichier “MyFile.mak” avec un contenu:

 FILE := "my file content" FILE += "more content 1" FILE += "more content 2"