User Tools

Site Tools


makefile

This is an old revision of the document!


Table of Contents

O programa make é uma ferramenta bastante utilizada para o controle de grandes programas, facilitando as tarefas de compilação e execução. Para entender o seu funcionamento, suponha a existência de um programa composto por três arquivos: main.f, part1.f e part2.f.

A compilação deste programa utilizando o Intel® Fortran Compiler é realizada por meio do comando:

ifort main.f part1.f part2.f -o exec

ou

ifort -c main.f
ifort -c part1.f
ifort -c part2.f
ifort main.o part1.o part2.o -o exec

que cria um arquivo executável chamado exec que pode ser executado a partir do comando:

./exec

Na segunda opção de compilação, os três primeiros comandos tem como finalidade a obtenção de arquivos do tipo “objeto”, com extensão “.o”. Já o último comando realiza a conexão entre os três subprogramas. Esta forma de organização e compilação dos arquivos que compõem o programa é mais conveniente para a utilização do arquivo Makefile. Isso possibilitará que a tarefa de compilação seja mais rápida, pois apenas as partes do programa que foram editadas precisam ser compiladas novamente.

A seguir, serão exibidas três opções de criação do arquivo Makefile, avançando em grau de dificuldade e generalidade.

Opção 1

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:

compile:
   ifort main.f part1.f part2.f -o exec

run:
   ./exec

clear:
   rm -f *.o *.mod exec

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

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:

COMPILADOR = ifort

compile: exec

exec: main.o part1.o part2.o
   $(COMPILADOR) main.o part1.o part2.o -o exec

part1.o: part1.f
   $(COMPILADOR) -c part1.f

part2.o: part2.f
   $(COMPILADOR) -c part2.f

main.o: main.f part1.o part2.o
   $(COMPILADOR) -c main.f part1.o part2.o

run:
   ./exec

clear:
   rm -f *.o *.mod exec

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

Nesta opção, se

makefile.1472759372.txt.gz · Last modified: by jeferson