2009-08-12 2 views
2

우리 프로젝트에서 재귀 적 make를 사용하고 있습니다. FlexLM 라이센스가있는 상업용 임베디드 컴파일러 (diab)도 사용합니다.make를 사용하여 라이센스 서버에서 컴파일러 라이센스를 빌리시겠습니까?

현재 각 디렉토리의 최상위 대상에 대한 종속성으로 license-borrowing을 추가하고 있습니다. 이처럼

: BORROW_COMPILERRETURN_COMPILER 라이센스를 획득 스크립트입니다

.PHONY: target 
target: borrow_compiler $(TARGETLIB) 
    $(RETURN_COMPILER) 

.PHONY : borrow_compiler 
borrow_compiler: 
    @$(BORROW_COMPILER) 300 

.

우리의 문제는 각 재귀 하위 디렉토리에 대한 라이센스 서버와의 통신으로 인해 약간의 변경 후에 빌드하는 데 시간이 오래 걸린다는 것입니다.

더 좋은 방법이 있나요?

+0

그것은, 같은 쉬운 일이 아니다. –

답변

0

makefile에서 실행하는 대신 make 프로그램 래퍼를 작성한 다음 처음에 라이센스를 빌린 다음 인수를 사용하여 make를 호출하고 make return이 라이센스를 반환 한 후에? make wrapper가 사용되도록 강제하려는 경우 makefile에서 일부 특수 환경 변수가 설정되어 있는지 확인할 수 있습니다.

+0

하지만 C/C++ 파일을 컴파일해야 할 경우 라이센스를 빌려주 지 않고 make를 실행하고 라이센스를 빌려야합니다. 모든 c/C++ 파일이 컴파일 될 때까지 라이센스가 반환되지 않아야합니다. 음 ... make가 재귀 적으로 호출되는지 감지 할 수 있습니까? 그런 다음 상위 makefile 만 차용해야합니다. –

+0

make를 재귀 적으로 실행하지 않는 것도 고려할 수 있습니다. "Recursive Make Considered Harmful"http://miller.emu.id.au/pmiller/books/rmch/를 참조하십시오. – hlovdal

1

해결 방법은 MAKELEVEL입니다. 이제 라이센스는 최상위 레벨에서만 차용됩니다. 이것은 메이크의 모든 수준으로 포함되어 단지 오브젝트 파일에 borrow_compiler``에 대한 의존성을 설정하는 등 그 중간에 라이센스를 반환하기 때문에

ifeq ($(MAKELEVEL),0) 
    BORROW_COMPILER = python $(relativeToolPath)scripts/borrowCompilerLicence.py 
    RETURN_COMPILER = python $(relativeToolPath)scripts/returnCompilerLicence.py 
else 
    # true does nothing 
    BORROW_COMPILER = true 
    RETURN_COMPILER = 
endif 
관련 문제