Makefile - Diretivas
Existem inúmeras diretivas disponíveis em várias formas. omakeprograma em seu sistema pode não suportar todas as diretivas. Portanto, verifique se o seumake apoia as diretrizes que estamos explicando aqui. GNU make suporta essas diretivas.
Diretivas Condicionais
As diretivas condicionais são -
o ifeqdiretiva começa a condicional e especifica a condição. Ele contém dois argumentos, separados por vírgula e entre parênteses. A substituição de variável é realizada em ambos os argumentos e, em seguida, eles são comparados. As linhas do makefile após o ifeq são obedecidas se os dois argumentos corresponderem; caso contrário, eles são ignorados.
o ifneqdiretiva começa a condicional e especifica a condição. Ele contém dois argumentos, separados por vírgula e entre parênteses. A substituição de variável é realizada em ambos os argumentos e, em seguida, eles são comparados. As linhas do makefile após o ifneq serão obedecidas se os dois argumentos não corresponderem; caso contrário, eles são ignorados.
o ifdefdiretiva começa a condicional e especifica a condição. Ele contém um único argumento. Se o argumento fornecido for verdadeiro, a condição se torna verdadeira.
o ifndefdiretiva começa a condicional e especifica a condição. Ele contém um único argumento. Se o argumento fornecido for falso, a condição se tornará verdadeira.
o elsediretiva faz com que as seguintes linhas sejam obedecidas se a condicional anterior falhar. No exemplo acima, isso significa que o segundo comando alternativo de vinculação é usado sempre que a primeira alternativa não é usada. É opcional ter um else em uma condicional.
o endifdiretiva termina o condicional. Cada condicional deve terminar com um endif.
Sintaxe das diretivas condicionais
A sintaxe de uma condicional simples sem outra é a seguinte -
conditional-directive
text-if-true
endif
O text-if-true pode ser qualquer linha de texto, a ser considerada como parte do makefile se a condição for verdadeira. Se a condição for falsa, nenhum texto será usado.
A sintaxe de uma condicional complexa é a seguinte -
conditional-directive
text-if-true
else
text-if-false
endif
Se a condição for verdadeira, text-if-true será usado; caso contrário, text-if-false é usado. O text-if-false pode ser qualquer número de linhas de texto.
A sintaxe da diretiva condicional é a mesma, seja a condicional simples ou complexa. Existem quatro diretivas diferentes que testam várias condições. Eles são dados -
ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"
As diretivas opostas das condições acima são as seguintes -
ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"
Exemplo de diretivas condicionais
libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
A incluir diretiva
o include directive permite makepara suspender a leitura do makefile atual e ler um ou mais makefiles antes de continuar. A diretiva é uma linha no makefile que parece a seguir -
include filenames...
Os nomes de arquivo podem conter padrões de nome de arquivo shell. Espaços extras são permitidos e ignorados no início da linha, mas uma tabulação não é permitida. Por exemplo, se você tiver três arquivos `.mk ', a saber,` a.mk', `b.mk 'e` c.mk', e $ (bar), então ele se expande para bish bash, e então o seguinte expressão.
include foo *.mk $(bar)
is equivalent to:
include foo a.mk b.mk c.mk bish bash
Quando o makeprocessa uma diretiva de inclusão, ele suspende a leitura do makefile e lê cada arquivo listado por vez. Quando terminar,make continua lendo o makefile no qual a diretiva aparece.
A diretiva de substituição
Se uma variável foi definida com um argumento de comando, então as atribuições comuns no makefile são ignoradas. Se você quiser definir a variável no makefile mesmo que tenha sido definida com um argumento de comando, você pode usar uma diretiva de substituição, que é uma linha que parece a seguir -
override variable = value
or
override variable := value