44
15 a Aula - Bibliotecas e ’make’. Programa¸ ao Mestrado em Engenharia F´ ısica Tecnol´ ogica Samuel M. Eleut´ erio [email protected] Departamento de F´ ısica Instituto Superior T´ ecnico Universidade de Lisboa Mestrado em Engenharia F´ ısicaTecnol´ogica Programa¸c˜ ao - 15 a Aula (05.11.2018)

Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio [email protected]

Embed Size (px)

Citation preview

15a Aula - Bibliotecas e ’make’.

ProgramacaoMestrado em Engenharia Fısica Tecnologica

Samuel M. [email protected]

Departamento de FısicaInstituto Superior Tecnico

Universidade de Lisboa

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.a

isto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.

Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:

Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.

Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;

As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.cE sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)