2009-08-12 2 views
2

Мы используем рекурсивный make в нашем проекте. Мы также используем коммерческий встроенный компилятор (diab) с лицензией FlexLM.Использование make для получения лицензии на компилятор с сервера лицензий?

В настоящее время мы добавляем лицензионное заимствование как зависимость от целей верхнего уровня в каждом каталоге.

Как это:

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

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

где BORROW_COMPILER и RETURN_COMPILER скрипты, которые приобретает лицензию.

Наша проблема заключается в том, что после небольшого изменения требуется много времени из-за связи с сервером лицензий для каждого рекурсивного подкаталога.

Есть ли лучший способ сделать это?

+0

Это не так просто, как установка зависимость к 'borrow_compiler' на объектные файлы, так что бы вернуть лицензию досрочно. –

ответ

0

Как насчет того, чтобы вместо этого делать в make-файле, написать make-программу-оболочку, которая сначала заимствует лицензию, а затем вызывает make с аргументами, а после возврата возвращается лицензия? Вы можете проверить в make-файле, что определенная специальная переменная среды установлена, если вы хотите, чтобы принудительно применялась оболочка make.

+0

Но я хочу запустить make, не заимствуя лицензию, а затем занять лицензию только в том случае, если необходимо скомпилировать файл c/C++. Кроме того, лицензия не возвращается, пока не будут скомпилированы все файлы c/C++. Хм .. Может быть, можно обнаружить, что make называется рекурсивно? Тогда только верхний файл makefile должен выполнить заимствование. –

+0

Вы также можете подумать о том, что не работает, рекурсивно, см. «Рекурсивная оценка считается вредной», http://miller.emu.id.au/pmiller/books/rmch/. – hlovdal

1

Решение было смотреть на MAKELEVEL. Теперь лицензия заимствована только на самом высоком уровне. Это включено на всех уровнях Makefiles:

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 
Смежные вопросы