Как я вижу, вы можете определить зависимые от правила значения для переменных.
build_with_tcc: CC=tcc compile_tcc
compile_tcc:
## Commands to do a full build with tcc.
build_with_gcc: CC=gcc LD=g++ link_gcc
compile_gcc:
## Commands to compile with gcc.
link_gcc: compile_gcc
## Commands to link with g++.
И построить его, вызвав соответствующее правило.
Если вы хотите, с другой стороны,чтобы быть в состоянии передать произвольную цепочку инструментов компилятора, вы все равно должны будете иметь некоторые ограничения.
Правило:
build_with_arbitrary: compile_arbitrary link_arbitrary
Подразумевается, что ваша сборка должна быть выполнена в два этапа и соответствующие правила(compile_arbitrary
и link_arbitrary
) должны подчиняться одной и той же командной строке.
Таким образом, вы можете вызывать make
с пользовательскими CC
и LD
переменными:
CC=any_cc LD=any_ld make build_with_arbitrary
Наконец,вы можете добавить грязную проверку на пустоту LD
на этапе компоновщика и выполнять ее только в том случае, если нет.
link_arbitrary:
[ -n "$(LD)" ] && do_linker_stuff
Таким образом, вы можете использовать build_with_arbitrary
даже для компилятора, который делает все за один шаг.шаг просто пройдя мимо:
CC=any_cc LD= make build_with_arbitrary
Я надеюсь, что правильно понял ваш вопрос.Извините, если я неправильно понял, и, пожалуйста, скажите мне, где я был неправ.