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.
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)
En supposant GNU make:
file := whatever.txt
variable := $(Shell cat ${file})
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))
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.
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
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"
Comme la plate-forme n'a pas été spécifiée, voici comment cela fonctionne sur Solaris:
VERSION:sh = cat VERSION
all:
echo $(VERSION)