Both sides previous revisionPrevious revisionNext revision | Previous revision |
makefile [2016/09/01 19:48] – jeferson | makefile [2016/09/01 20:02] (current) – [Opção 3] jeferson |
---|
==== Opção 1 ==== | ==== Opção 1 ==== |
| |
O arquivo Makefile mais simples de ser escrito consiste em agrupar os comandos necessários da seguinte forma: | O arquivo <font inherit/courier new,courier,monospace;;inherit;;inherit>Makefile</font> mais simples de ser escrito consiste em agrupar os comandos necessários da seguinte forma: |
| |
<code> | <code> |
</code> | </code> |
| |
Com este arquivo, basta digitar "make" ou "make compile" para que o programa seja compilado e "make run" para que seja executado. A opção "make clear", por sua vez, apaga todos os arquivos gerados durante a compilação e execução do programa. | Com este arquivo, basta digitar "<font inherit/courier new,courier,monospace;;inherit;;inherit>make</font>" ou "make <font inherit/courier new,courier,monospace;;inherit;;inherit>compile</font>" para que o programa seja compilado e "<font inherit/courier new,courier,monospace;;inherit;;inherit>make run</font>" para que seja executado. A opção "<font inherit/courier new,courier,monospace;;inherit;;inherit>make clear</font>", por sua vez, apaga todos os arquivos gerados durante a compilação e execução do programa. |
| |
==== Opção 2 ==== | ==== Opção 2 ==== |
| |
Nesta opção, serão criados os arquivos do tipo "objeto" com a posterior conexão entre os subprogramas. No entanto, é necessário que se saibam as dependências entre cada subprograma. Para este exemplo, suponha que o programa main.f dependa dos demais arquivos. Neste caso, o arquivo Makefile deve ser escrito da seguinte forma: | Nesta opção, serão criados os arquivos do tipo "objeto" com a posterior conexão entre os subprogramas. No entanto, é necessário que se saibam as dependências entre cada subprograma. Para este exemplo, suponha que o programa main.f dependa dos demais arquivos. Neste caso, o arquivo <font inherit/courier new,courier,monospace;;inherit;;inherit>Makefile</font> deve ser escrito da seguinte forma: |
| |
<code> | <code> |
| |
Apesar de ser uma forma mais rebuscada do que a opção 1, nesta opção é necessário que se conheçam as dependências entre cada subprograma, o que nem sempre é tarefa fácil. Além disso, para cada novo subprograma adicionado é necessária a edição do Makefile para a sua inclusão na rotina de compilação. | Apesar de ser uma forma mais rebuscada do que a opção 1, nesta opção é necessário que se conheçam as dependências entre cada subprograma, o que nem sempre é tarefa fácil. Além disso, para cada novo subprograma adicionado é necessária a edição do Makefile para a sua inclusão na rotina de compilação. |
| |
| |
==== Opção 3 ==== | ==== Opção 3 ==== |
| |
Nesta opção, se | Esta opção, apesar de mais abstrata, é a que traz mais generalidade ao Makefile. Para o exemplo aqui apresentado, inclui-se o arquivo global_var.f, que contém a declaração das variáveis em um módulo e que deve ser compilado antes dos demais arquivos. Neste caso, o arquivo Makefile deve ser da seguinte forma: |
| |
| <code> |
| COMPILADOR = ifort -O2 |
| |
| FSOURCES = $(wildcard *.f) |
| |
| compile:exec |
| exec: $(FSOURCES:.f=.o) |
| @$(COMPILADOR) -o $@ $^ |
| |
| global_var.o: global_var.f |
| @$(COMPILADOR) -c global_var.f |
| |
| %.o: %.f global_var.o |
| @$(COMPILADOR) -c $<-o $@ |
| |
| clean: |
| @rm -f *.o *.mod exec |
| run: |
| @./exec |
| </code> |
| |
| Neste arquivo, o @ no início de cada comando faz com que este não seja impresso na tela. O comando "FSOURCES = $(wildcard *.f)" faz com que todos os arquivos com extensão ".f" sejam compilados. |
| |
| Em seguida, a variável especial "$^" é incluída e realiza a substituição de todas as dependências de cada um dos arquivos compilados. Com o comando "%.o", o arquivo entende que todos os arquivos ".f" devem ser compilados para a extensão ".o" (atentar para a criação da dependência entre os demais arquivos ".f" com "global_var.f" neste comando). A variável "$<" é substituída pelas dependências do subprograma. Por fim, a variável especial "$@" é substituída pelo nome do arquivo sendo compilado. |
| |
| |