Bash 스크립트에서 호출하면 Make가 작동하지 않습니다.

Bash 스크립트에서 호출하면 Make가 작동하지 않습니다.

그래서 방금 질문을 했습니다.for 루프 목록

이제는 훌륭하게 작동하고 필요한 것을 출력합니다. 이제 이것을 목록의 각 변수에 대해 호출되어야 하는 makefile에 다음과 같이 연결하고 싶습니다.

#!/bin/bash
mylist=(
    '$(call list_samples,AON_9,NT_1,SC_17)'
    '$(call list_samples,AON_10,NT_2,SC_18)'
    '$(call list_samples,AON_11,NT_3,SC_19)'
    '$(call list_samples,AON_12,NT_4,SC_20)'
    '$(call list_samples,AON_13,NT_5,SC_21)'
    '$(call list_samples,AON_14,NT_6,SC_22)'
    '$(call list_samples,AON_15,NT_7,SC_23)'
    '$(call list_samples,AON_16,NT_8,SC_24)'
)



for SAMPLES_out in "${mylist[@]}";
do
make -f make_gene_read_count.mk -n SAMPLES_OUT=\'${SAMPLES_out}\'
done

이로 인해 오류가 발생합니다.make_gene_read_count.mk:5: *** unterminated call to function `call': missing `)'. Stop.

Bash 스크립트에서 호출 앞에 echo를 넣으면 다음과 같이 인쇄됩니다.

make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_9,NT_1,SC_17)'
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_10,NT_2,SC_18)'
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_11,NT_3,SC_19)'
make -f make_gene_read_count.mk -n SAMPLES_OUT='$(call list_samples,AON_12,NT_4,SC_20)'

이러한 에코 중 하나를 명령줄에 추가하면 makefile이 제대로 작동합니다. 내가 무엇을 놓치고 있나요?

생성된 파일은 다음과 같습니다.

IN_DIR = /data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/namesorted_bams
list_samples = $(shell ls $(IN_DIR)/*$(1)* $(IN_DIR)/*$(2)* $(IN_DIR)/*$(3)* | sed 's/\.namesorted\.bam/\.gene\.read\.count/g')
#SAMPLES_OUT := $(call list_samples,AON_9,NT_1,SC_17)

all: $(SAMPLES_OUT)

GFF := /data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/GFF/H3K4me1.gff
GFF_TEMP := $(GFF).temp.gff

$(GFF_TEMP): $(GFF)
    sed 's/\*/./g' $< > $@

%.gene.read.count: %.namesorted.bam $(GFF_TEMP)
    htseq-count -t exon -m intersection-strict -f bam -r name -s no $^ > $@

또한 makefile에 2개의 변수를 전달하려고 시도했지만 bash 스크립트 목록에서 이 작업을 수행하면 작동하지 않는 것 같습니다.

'$(call list_samples,AON_9,NT_1,SC_17) GFF=/data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/GFF/H3K4me1‌​.gff'

내가 받은 오류는 다음과 같습니다.

qmake: *** No rule to make target `GFF=/data/DIV5/SASC/project-013-motor/analysis/runs/BWA_chipcap/BAMS/GFF/H3K4me1.gff', needed by `all'.  Stop.

답변1

작은따옴표가 메이크파일에 전파되는 것을 원하지 않습니다. 인용하지 말고 큰따옴표로 바꾸십시오. 이렇게 하면 변수 값이 쉘에서 한 단어로 유지됩니다.

make -f make_gene_read_count.mk -n SAMPLES_OUT="$SAMPLES_out"

더 많은 변수를 전달하려면 따옴표 없는 공백으로 구분하세요.

make VAR1="some value containing $val" VAR2='some other value'
#                                     ^

관련 정보