2011-07-20 9 views

Respuesta

18

supongo que le gusta para establecer una variable en su Makefile al contenido de otro archivo:

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

target: 
    echo $(VARIABLE) 
+1

Eso es lo que he estado intentando pero me aparece el error: "'VARIABLE' no se reconoce como un comando interno o externo, programa operable o archivo por lotes." Por favor, tenga en cuenta que estoy usando GNU make Windows y que estoy tratando de hacer esto de una de mis metas: todo: VARIABLE = 'cat $ (PATH_TO_MY_DATA_FILE)' – Srinath

+1

de haber introducido la definición de la variable por encima de la ' todo: '¿verdad? [edit] Acabo de editar la respuesta a mi test-Makefile local que funciona usando GNU Make Windows 3.81 –

+1

En realidad, no puedo poner la definición VARIABLE sobre todo: porque PATH_TO_MY_DATA_FILE no existe hasta que se hayan ejecutado algunos comandos en all: target. Como alternativa, lo que he hecho es dividir las cosas en dos makefiles (creado una submatriz) y declarar la VARIABLE en la parte superior de la subpágina y ahora funciona como un amuleto. – Srinath

51

Suponiendo GNU make:

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

No funciona en Solaris con '/ usr/ccs/bin/make'. – ceving

+3

@ceving Utilice la marca estándar GNU. Solaris make es una aplicación no portátil. –

+0

Gnu make no es ni estándar ni más portátil que los Solaris. "Popular" es tu palabra.Si consideramos seriamente la portabilidad y la conformación estándar, quédese con posix. – soubunmei

6

cat no existe en Windows . Solución que funciona para Linux y Windows:

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

Explicación: parece que en Windows no siempre es variable OS entorno definido para que sea igual a 'Windows_NT'. De esta forma, para Windows se utiliza el comando type, para Windows se usa cat.

2

Como no se ha especificado la plataforma, ésta es la manera como funciona en Solaris:

VERSION:sh = cat VERSION 

all: 
     echo $(VERSION) 
2

GNU make versión 4.2 es compatible con archivos operación de lectura, por lo que respecta a Maxim Egorushkin 's gran respuesta hay una forma opcional de resolver este problema ahora:

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