2017-12-18 19 views
-2

파일을 복사하려고합니다. (다른 이름의 파일에 파일을 복사 할 수 있도록 이름이 같은 두 개의 소스 파일이 있음) 파일을 복사하려고합니다. MAKEFILE의 나는 folliwng를하려고하지만 실행 순서에 불일치가있을 수 있습니다. 어떻게 올바르게 할 수 있습니까?MAKEFILE을 사용하여 컴파일하기 전에 파일을 복사하고 삭제 후

all: copy_dup_files $(dst_dir) $(APP_TARGET_LIB) delete_dup_files 

copy_dup_files: 
    @echo "COPYING DUP FILES" 
    $(shell cp /aaa/hmac.c /aaa/hmac1.c) 
    $(shell cp /bbb/hmac.c /bbb/hmac2.c) 

delete_dup_files: 
    @echo "DELETING DUP FILES" 
    $(shell rm /aaa/hmac1.c) 
    $(shell rm /bbb/hmac2.c) 

감사

답변

2

$(shell)의 목적은 읽고 확인 출력을 생산하는 것입니다. 레서피 라인에는이 구성이 전혀 없어야합니다. 그래서

# this is evaluated when the Makefile is read 
value := $(shell echo "Use the shell to produce a value for a variable") 

# this is evaluated when you say "make foo" 
foo: 
    echo 'No $$(shell ...) stuff here' 

Makefile 읽을 때 당신의 시도에있는 모든 $(shell ...) 물건이 평가됩니다 만, 실제 대상이 실행되기 전에.

+4

제쳐두고 컴파일하기 전에 파일을 복사하는 것은 그 자체로 반 패턴처럼 보입니다. 너 왜 그걸하고 있니? 너는 * 실제로 * 성취하려고 하는게 뭐야? – tripleee

0

귀하의 메이크 파일이 /aaa/hmac1.c에 달려 있으며, 이는 /aaa/hmac.c에 달려 있습니다. 따라서 우리는이 :이 깨끗하고 병렬 안전 (모든 메이크의 좋은 테스트)입니다

/aaa/hmac1.c: /aaa/hmac.c 
    cp $< [email protected] 

/bbb/hmac2.c: /bbb/hmac.c 
    cp $< [email protected] 

/aaa/hmac1.o /bbb/hmac2.o: %.o: %.c 
    gcc $< -o [email protected] 

myprog: /aaa/hmac1.o /bbb/hmac2.o 
    gcc $^ -o [email protected] 

.

  • 자동 의존성 생성을 복사하는
  • 사용 심볼릭 링크 대신 절대 경로를 제거하기

    • 같은 당신이 만들 수있는 수많은 스타일의 개선,
    • ( .h 파일 등)이 있습니다
    • 소스 트리를 공유하지 마십시오. — 모든 중간 파일 (.o 및 임시 .c)을 자신의 빌드 폴더에 넣습니다.

    &c. & c.

  • +0

    끝에 hmac1.c & hmac2.c도 삭제해야합니다. 이것을 어떻게 할 수 있습니까? –

    +0

    @RanTeshuva 개인적으로 나는 그들을 떠날 것입니다. '.o' 파일에 대해 생각하는 것과 같은 방식으로 생각하십시오. 빌드 제품이기 때문에 오브젝트 파일이 들어있는 것과 같은 임시 폴더에 생성합니다. – bobbogo

    +0

    @RanTeshuva 정말로 삭제하려면 컴파일 용 레시피에서 삭제하고 삭제하십시오. 한 번에 모든 복사를 수행하는 무거운'copy_dup_files' 단계를 갖는 것은 잘못된 단계입니다. _Make_는 정교한 종속성을 선호합니다 (병렬 빌드에서 잘 작동합니다). – bobbogo