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"