Make/CVS example 1

From Wiki**3

Revision as of 16:53, 9 March 2008 by Root (talk | contribs) (New page: {{TOCright}} == The Problem (in Portuguese) == <p>Considere quatro ficheiros <tt> <span style="color: #990000">recurs.cpp</span></tt> (contendo a função <tt> <span style=...)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The Problem (in Portuguese)

Considere quatro ficheiros recurs.cpp (contendo a função factrecurs ), recurs.h (contendo a declaração da função factrecurs), iter.cpp (contendo a função factiter ), iter.h (contendo a declaração da função factiter) e main.cpp (contendo a função main que invoca sequencialmente ambas as funções anteriores e que inclui recurs.h e iter.h ).

  1. Construa, com estes cinco ficheiros, um projecto designado factorial, indicando os comandos para o colocar sob o controlo de versões do CVS. Admita que o repositório já existe em /cvs .
  2. Construa uma Makefile para gerar o executável fact, a partir dos ficheiros anteriores. Indique os comandos necessários para colocar a Makefile no repositório CVS.
  3. Considere agora que vai ter dois executáveis, cada um invocando a sua função. Indique as alterações à Makefile para que passe a gerar os executáveis recurs e iter, utilizando ambos o mesmo ficheiro main.cpp (mas diferentes implementações do factorial). Indique as operações do CVS para criar a nova versão do projecto, assumindo que o projecto está checked-out no directório corrente.
  4. Considere uma nova versão do projecto: pretende-se construir um único executável fact, mas a escolha da implementação do factorial é efectuada em tempo de execução. Considere que os ficheiros recurs.cpp e recurs.h existem num subdirectório recurs e, analogamente, existe um directório iter para a outra versão. Cada um dos conjuntos apresenta agora a mesma interface para a função que calcula o factorial: fact . Construa duas bibliotecas dinâmicas, ambas designadas por fact.so, cada uma em seu directório ( recurs/fact.so e iter/fact.so). A selecção da variante a utilizar faz-se definindo a variável de ambiente LD_LIBRARY_PATH com o directório apropriado. Indique quais os ficheiros iniciais modificados, face à alínea anterior, a nova Makefile e os comandos CVS necessários para que o repositório passe a conter a nova versão.
  5. Modifique a alínea anterior para que o utilizador possa escolher a variante a utilizar através de um argumento na linha do comando fact, respectivamente recurs ou iter. Indique quais os ficheiros iniciais modificados, a nova Makefile e os comandos CVS necessários para registar a nova versão.

 

Implementation

The following sections present possible implementations.