2016-08-30 6 views
0

나는이 프로젝트에 프로젝트에서 이동할 때 내 워크 플로우를 단순화 다음과 같은 별명 :ENV 변수를 메이크 파일을 지정합니다

alias mk='make -f ${ACTIVE_MAKEFILE}' 

일부 배경 : 메이크 파일이 관련된 이름, 모두 함께, 별도의 디렉토리에 있습니다 그들이 말하는 프로젝트. 그들은 내 개인 메이크은

  1. , 나는
  2. 내가 실제로 변경 내용을 추적 할 REPO에 커밋하고 싶지 않아, 그래서 그들은해야합니다 때문에 프로젝트 디렉토리에 보관하지 않는다 레포에 있으십시오. 이를 위해 umbrella 프로젝트가 있습니다.

이 작업은 정상적으로 작동하지만 완료를 잃습니다. mk <TAB>을 실행하면 사용 가능한 Makefile 대상이 표시되지 않으므로 별칭을 사용하면 실제로 내 워크 플로의 효율성이 떨어집니다. 내가 대신 -f 플래그를 사용하여 특정 메이크 파일을 사용할 수 있도록 이야기, 나는 그냥을 이야기하는 ENV 변수를 설정할 수 있다고 생각

, 뭔가 같은 : 다음

export MAKEFILE=my-makefile 

그리고 명령을

make 

자동으로 내 my-makefile을 사용하게됩니다. 명령이 변경되지 않았기 때문에 자동 완성 기능이 계속 작동합니다.

하지만 그 중 하나 옵션은 존재하지 않는, 또는 나는에 make 말할 수 (있는 경우) 내가 설정할 수 있습니다 ENV 어떤 변수 Makefile

를 선택하기 위해 사용 내린 ENV 변수의 이름을 찾을 수 없습니다입니다 특정 메이크 파일을 사용 하시겠습니까?

+0

디렉토리 밖의 디렉토리를 가리키는 디렉토리에서 makefile (또는 Makefile 또는 GNUMakefile 또는 심지어 'delavnog.mk')이라는 심볼릭 링크를 사용하여 env var을 고정 된 이름으로 설정할 수 있다고 생각 했습니까? 관련있는 메이크 파일을 만들고 VCS에서 로컬 심볼릭 링크를 무시하여 중앙 저장소에 푸시되지 않도록합니다. –

+0

또 다른 대안으로 별명'dlnmk' 대신 셸 스크립트를 사용하여 makefile을 찾는 규칙을 적용합니다. 오버 헤드는 극히 적어서 생각을 스크립트로 캡슐화하므로 더 이상 생각할 필요가 없습니다. –

+0

@JonathanLeffler : 첫 번째 제안은 내 유스 케이스에 맞습니다. 감사! 답변으로 추가 하시겠습니까? 나는 기꺼이 받아 들일거야. – dangonfast

답변

1

두 가지 옵션이 원래 의견 제안 :

  1. 당신은 고정, 균일 한 이름으로 각 디렉토리에 심볼릭 링크를 생성하는 것으로 간주 되세요를 가리 (makefile 또는 Makefile, 또는 delavnog.mk를 호출 할 수 있습니다) 디렉토리 밖의 메이크 파일과 관련이 있습니까? 그런 다음 별칭은이 고정 된 이름을 사용하기 만하면 VCS가 로컬 심볼릭 링크를 무시하므로 중앙 저장소에 푸시되지 않습니다.

  2. 별칭 대신 쉘 스크립트 (아마도 dlnmk)를 사용하고 makefile을 찾을 수있는 규칙을 적용해야합니다 (스크립트가 makefile의 올바른 이름과 위치를 결정하고 올바른 -f 옵션을 사용하여 make을 호출하십시오. 오버 헤드는 극히 적어서 생각을 스크립트로 캡슐화하므로 더 이상 생각할 필요가 없습니다.

두 가지 중에서, 나는 스크립트와 함께 가고 싶지만 모자 한 방에 스크립트를 작성합니다. 현재 내 $HOME/bin 디렉토리에는 약 400 개의 스크립트가 있고 관련 RCS 디렉토리에 저장된 거의 900 개의 스크립트가 있습니다. - 잠시 동안이 작업을 해왔고 Git은 처음 20 년 동안 옵션이 아니 었습니다 (그렇게하지 않았기 때문에). 아직 존재하지 않는다).