Makefile: Copiar usando variáveis do make - erro; Não é assim sem variáveis!

0

No makefile a seguir

InputLocation:=./Test
OutputLocation:=$(InputLocation)/Output
Input:=$(wildcard $(InputLocation)/*.md)
Output:=$(patsubst $(InputLocation)/%, $(OutputLocation)/%, $(Input:Input=Output))

.PHONY: all
all: $(Output)

$(OutputLocation)/%.md : $(InputLocation)/%.md
    cp -rf $< $@;
    ActualFilePath="$<"
    InterimFile1Path="$@"
    #cp -rf $(ActualFilePath) $(InterimFile1Path);

cp -rf $< $@; copia o arquivo com sucesso.

Enquanto cp -rf $(ActualFilePath) $(InterimFile1Path) der um erro cp: missing file operand

Por que isso acontece?

    
por Nikhil 16.09.2018 / 14:33

1 resposta

1

Execute make -n para ver os comandos que seriam executados ou execute make sem opções e observe os comandos que são executados. Fazer isso provavelmente já responderia a sua pergunta e, caso contrário, nos permitiria saber o que acontece.

A partir do fragmento que você mostra, parece que você quer atribuir variáveis shell e depois usar variáveis make. Portanto, TargetLocation parece ser uma variável make , enquanto ActualFilePath="$<" parece ser um comando para o shell.

Dependendo do resto do arquivo, isso pode funcionar:

ActualFilePath="$<"; \
InterimFile1="tempHTML.md"; \
InterimFile1Path="$(TargetLocation)/$${InterimFile1}" ; \
cp -rf $${ActualFilePath} $${InterimFile1Path};

Editar

Na parte recuada das regras, você não está atribuindo make variables, você especifica comandos shell.

Isso deve funcionar:

$(OutputLocation)/%.md : $(InputLocation)/%.md
    cp -rf $< $@;
    ActualFilePath="$<"; \
    InterimFile1Path="$@"; \
    cp -rf $${ActualFilePath} $${InterimFile1Path}

E isso deve funcionar também:

ActualFilePath="$<"
InterimFile1Path="$@"
$(OutputLocation)/%.md : $(InputLocation)/%.md
    cp -rf $(ActualFilePath) $(InterimFile1Path);
    
por 16.09.2018 / 14:39