10 개의 다른 파일에 대해 동일한 분석을 수행하는 프로젝트가 있습니다. 예를 들어 test1.txt
.... test10.txt
으로 시작합니다. 그들은 각각 test1
... test10
이라는 10 개의 다른 폴더에 설치됩니다. 파일에 대한 몇 가지 테스트를 실행하고 test1_v1.txt
... test10_v1.txt
을 생성 한 다음, Rscript를 사용하여 분석을 한 번 더 실행하고 ... test10_v2.txt
을 생성하는 Python 스크립트가 있습니다.반복되는 절차를 위해 makefile을 작성하는 방법은 무엇입니까?
TEST_FOLDER=test1 test2 test3 test4 test5 test6 test7 test8 test9 test10
test3/%_v1.txt:
@$(foreach var, $(TEST_FOLDER), python run_test.py -in $(var)/$(var).txt -out $(var)/$(var)_v1.txt;)
test3/%_v1.txt:
@$(foreach var, $(TEST_FOLDER), Rscript run_stat.R -in $(var)/$(var)_v1.txt -out $(var)/$(var)_v2.txt;)
나는 이것이 정말 나쁜 설치 알고, 더 정확한 종속성이 없습니다 : 지금은이 같은 makefile
설정을 가지고있다. test3/%_v1.txt
의 파일에만 의존합니다. 나는 다음과 같은 것을 사용하려고 시도했다.
$(TEST_FOLDER)/$(TEST_FOLDER)_v1.txt:$(TEST_FOLDER)/$(TEST_FOLDER).txt
python run_test.py -in $^ -out [email protected]
그러나 작동하지 않았다. makefile
을 셸 스크립트가 아닌 makefile
으로 만드는 것에 대한 제안은 훌륭합니다.
make
은 훌륭합니다.
감사합니다. 이 질문에 대한 마지막 질문 : $ T와 $ (T)의 차이점은 무엇입니까? – msakya
또한'% _v2.txt : % _v1.txt :'에서 폴더 위치를 지정하지 않은 이유는 무엇입니까? '%'는 모든 폴더에서 파일을 찾습니까? 죄송합니다, 카운터 질문에 대해 – msakya
차이점은 없습니다 : makefile에서'$'는 변수를 소개합니다. 변수는'$ @','$ <','$ T'와 같이 하나의 문자가 길거나 여러 문자 일 수 있습니다. 길이가 1 문자를 초과하면 괄호'$ (FOO)'또는 중괄호'$ {FOO} '로 묶어야합니다. 물론 원하는 경우'$ (T)','$ (@)'등도 쓸 수 있습니다. 이러한 표현 사이의 기능에는 차이가 없습니다. 모두 동일합니다. – MadScientist