2010-10-03 4 views
5

У меня есть BSDmakefile и GNUmakefile, которые в значительной степени идентичны, за исключением управления зависимостями.BSD Make и GNU Сделать совместимый make-файл

GNUmakefile:

ifneq ($(MAKECMDGOALS), "clean") 
-include $(dependencies) 
endif 

BSDmakefile:

.for i in $(dependencies) 
.sinclude "${i}" 
.endfor 

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

Альтернативно, если есть лучший подход, чем это, я хотел бы знать! (переход на SCons или CMake не подходит!)

Спасибо!

+1

Я не уверен, почему вы хотите это сделать: почему бы просто не потребовать 'gmake' или' bmake' везде? Если вы хотите быть портативным, вы можете использовать 'automake' и оставить детали. Многие проекты имеют достаточно сложное время, чтобы получить единую систему сборки, не говоря уже о 2. –

ответ

8

Вы можете поместить свой материал, специфичный для GNU, в GNUmakefile, свой специфичный для BSD материал в BSDmakefile, и ваши общие материалы в файле с именем Makefile.common или аналогичным. Затем включите Makefile.common в самом начале каждого из двух других. Downside, теперь у вас есть 3 make-файла вместо 2. Потенциал, вы будете редактировать только 1.

+1

Ваш «недостаток» похож на то, что разделение 10 000 LOC-файлов на логически связанные единицы имеет недостаток в создании более одного исходного файла. –

+2

@ Джэк Келли: Но это так. :) –

Смежные вопросы