Programar em C/Makefiles: diferenças entre revisões
[edição não verificada] | [edição não verificada] |
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição |
|||
Linha 1:
== Makefile ==
O makefile
,gmake, nmake, tmake, etc.<br>
Ele pode variar de um sistema a outro pois não faz parte de nem uma normalização .<br> O texto contido em um makefile e usado para a compilaçao de um projeto.<br>
Vantagens do uso.<br>
Evita a compilação de arquivos desnecessários.<br>
Por exemplo, se seu programa utiliza 120 bibliotecas e você altera apenas uma, o makefile descobre (comparando as datas de alteração dos arquivos fontes com as dos arquivos anteriormente compilados) qual arquivo foi alterado e compila apenas a biblioteca necessária.<br> As explicações a seguir sao para o
linguagem C.<br>
*Criar uma pasta com esses 4 arquivos :<br>
teste.c ,teste.h , main.c, Makefile.<br> *De um nome para a pasta Projeto.
Linha 51 ⟶ 54:
minimal.
#Para escrever
############################# Makefile ##########################
all: teste
Linha 69 ⟶ 72:
E compilar e so ir dentro da pasta "Projeto" apertar F4 escrever make e apertar enter.
Uma vez compilado podemos modificar teste.c . Se teste.c foi modificado
teste.o e se nao deixa teste.o como esta.
* all :
* teste: teste.c .Pode ser interpretado com arquivo_de_destino: arquivo_de_origem.
* clean: Apaga os arquivos
ele apaga os arquivos objeto da pasta.
* mrproper: Apaga tudo o que deve ser modificado.No console escreva make mrproper
Linha 88 ⟶ 91:
====Regras complementarias:====
* all :
* clean: Apaga os arquivos
* mrproper: Apaga tudo o que deve ser modificado.
====Definir
As
Em vez de mudar varias linhas mudamos so o valor da variavel.<br>
Deve ser por isso que se
Definimos da forma seguinte.
NOME=VALOR
E para
Vamos para o exemplo com o nosso Makefile.<br>
Linha 108 ⟶ 111:
*E para poder usar $(SRC) <br>
#Para escrever comentarios ##
############################# Makefile ##########################
#Definimos a
SRC=main.c
all: teste
Linha 129 ⟶ 132:
rm -rf teste
Todos os lugares do
====
*CC=gcc .Definimos CC para nomes de compiladores de C ou C++ .Aqui o gcc.
*CFLAGS=-W -Wall -ansi -pedantic .Serve para definir
*LDFLAGS e
*EXEC=teste .EXEC define o NOME do futuro programa
*OBJ=teste.o main.o . Para cada arquivo.c um arquivo OBJETO e criado com a
Entao e so olhar na sua pasta todos os arquivos com a
* Outra maneira e mesma coisa. OBJ agora e igual a main.o teste.o
SRC = main.c teste.c <br>
OBJ= $(SRC:.c=.o)
* E super manero a tua
*Mais tenho 200 arquivos.c e nao quero olhar o nome de todos um por um.<br> ** Tem outra ideia??
**
**
SRC= $(wildcard *.c)
OBJ= $(SRC:.c=.o)
*
*E mais tem um monte de
*Tem outra
*Para deixar as mensagens en modo silencioso coloque "@" no
*Fica assim
@$(CC) -o $@ $^
====
$@ Nome da regra.
$< Nome da primeira
$^ Lista de
$? Lista de
$* Nome do arquivo sem sufixo
====As regras de
Nao disse nada antes porque
Sao regras
* .c.o : .Ela significa fazer um arquivo.o
* %.o: %.c .A mesma coisa. A linha teste.o: teste.c pode ser modificada com essa regra.
* .PHONY: .Preste bem
** Por exemplo "clean:" e uma regra sem nem uma
** Agora vamos colocar na pasta um arquivo chamado clean. Se voce tentar apagar os "arquivos.o" escrevendo "make clean" nao vai
** Para evitar esse problema usamos a regra .PHONY : . Fica assim.
** .PHONY: clean mrproper
** .PHONY: diz que clean e mrproper devem ser executados mesmo se arquivos com esses nomes existem.
Agora vamos modificar mais uma vez o nosso Makefile com tudo o que sabemos sobre
#Para escrever
############################# Makefile ##########################
#Definimos a
CC=gcc
CFLAGS=-W -Wall -ansi -pedantic
Linha 187 ⟶ 191:
all: $(EXEC)
@echo "Vou comesar a compilaçao"
#Nao coloquei a variavel OBJ para que possao entender as
#Se
teste: teste.o main.o
# $@ = teste:
Linha 209 ⟶ 213:
====Sub Makefiles:====
Ler tudo isso so para compilar uma programa??<br>
O sub-makefile e lançado por meio de um "Makefile principal" vamos simplificar para o
Aonde
O Makefile Principal executa os sub-makesfiles de outras pastas.<br>
Como ele faz?? <br>
Usamos uma
Bao ao trabalho..
Crie dentro da pasta "Projetos" outra pasta com o nome "sub-make".Dentro da pasta sub-make crie um arquivo <br>Makefile e um arquivo submake.c
|