Project

General

Profile

Revision 5c1e083f

ID5c1e083f1cd05657745f6fcf6fa32f8ff4815b55
Parent 85dc6d05
Child 31a4c21e

Added by Manuel Costa about 7 years ago

Terminei a parte 2 - Ant

View differences:

documento.tex
116 116
Se tivermos um projecto de grandes dimensões torna-se um desafio compilar todos os ficheiros manualmente. É um processo repetitivo e cansativo além de estar sujeito a condicionantes dos sistemas operativos. Por exemplo, compilar um determinado projecto pode requerer variáveis do sistema que,possivelmente, variam entre sistemas operativos. Desta forma, é muito mais prático e eficaz compilar o projecto através de um \textit{Makefile}.
117 117
\subsubsection{Exemplo}
118 118

  
119
\begin{verbatim}
119
\begin{verbatim}[h]
120 120
.PHONY: all clean cleanall
121 121
files =  *.class
122 122

  
......
162 162
\end{enumerate}
163 163
Correndo o \textit{autoscan} são gerados dois ficheiros: \textit{autoscan.log} e \textit{configure.scan}. Altera-se o nome do \textit{configure.scan} para \textit{configure.ac} e este será um dos ficheiros no qual o programador irá escrever. Alternativamente pode-se criar o ficheiro \textit{configure.ac}, fica a critério do programador. Neste ficheiro é possível, por exemplo, introduzir ordens através de macros para verificar a existência de determinado(s) programa(s) no sistema. A macro AC\textunderscore CHECK\textunderscore PROG(variável,programa,yes) irá verificar se existe o programa. Esse resultado irá ficar armazenado numa variável com o valor especificado. Isto é, AC\textunderscore CHECK\textunderscore PROG(JAVAEX,javac,yes) irá verificar se existe o Java no sistema, fica armazenado na variável JAVAEX e esta terá valor de yes(equivalente a true) caso exista. É possível inclusive criar uma condição (if) que irá correr determinados comandos caso a variável seja true ou false. Pode-se também verificar a versão do java para garantir que o programa corre com todas as suas funcionalidades, caso o Java esteja desatualizado pode até nem correr. Existem outras macros que analisam a existência de livrarias específicas no sistema. Se um programa precisa duma determinada livraria para correr certas texturas, então essa livraria tem que estar presente no sistema para compilar o projecto. Ainda no \textit{configure.ac} é indicado onde vão ser gerados os \textit{Makefiles} (em que diretórios/sub-diretórios). 
164 164
Tendo o \textit{configure.ac} criado e com as devidas instruções, criam-se o(s) ficheiro(s) \textit{Makefile.am}(am de \textit{auto-make}).
165
\begin{figure}
165
\begin{figure}[h]
166 166
\includegraphics[scale=0.5]{Imagem1.png}
167 167
\caption{Pasta com o projecto e os ficheiros configure.ac/Makefile.am}
168 168
\end{figure}
169 169
A pasta contém \textit{configure.ac} e \textit{Makefile.am}. Ainda assim é preciso criar o \textit{Makefile.am} em todos os diretórios (neste caso nos sub-diretórios src e doc). Executa-se \textit{automake} para gerar os ficheiros restantes e o \textit{script configure}já irá gerar ficheiros \textit{Makefile} mas que ainda não fazem praticamente nada pois não tem nenhuma indicação nos ficheiros \textit{Makefile.am}. Em cada um destes ficheiros é que serão indicadas as regras para quando forem solicitados, executar determinados comandos (como por exemplo javac).
170
\begin{figure}
170
\begin{figure}[h]
171 171
\includegraphics[scale=0.5]{Autotools.png}
172 172
\caption{Diagrama do funcionamento das \textit{Autotools}}
173 173
\end{figure}
......
188 188
Da mesma forma que \textit{developers} encontraram uma solução para automatizar os processos de compilação, outras alternativas foram surgindo que, à partida, se distinguem em determinadas áreas. São um exemplo as \textit{Apache Ant Tools}, que surgem enquadradas no projecto \textit{Apache Tomcat} em 2000. Criada por James Duncan Davidson, também autor do projecto \textit{Apache Tomcat}.
189 189

  
190 190

  
191
\subsection{Ant vs \textit{make} - Diferenças e similaridades}
191
\section{Ant vs \textit{make} - Diferenças e similaridades}
192 192

  
193 193
É uma ferramenta também \textit{open-source} que serve para compilar projectos de programação. Como é natural, tem diferenças relativamente ao \textit{make}:
194 194
\begin{enumerate}
......
200 200
\end{enumerate}
201 201

  
202 202
\subsection{Contras à utilização do \textit{Ant}}
203
Como todas as ferramentas, o \textit{Ant} tem as suas próprias complicações. Uma delas é o facto de os \textit{build files} serem em \textit{XML}, que por si só tem uma complexa síntaxe que torna os ficheiros menos legíveis e compreensíveis.
203
Como todas as ferramentas, o \textit{Ant} tem as suas próprias complicações. Uma delas é o facto de os \textit{build files} serem em \textit{XML}, que por si só tem uma complexa síntaxe que torna os ficheiros menos legíveis e compreensíveis. Apesar dos IDE's (como o Eclipse ou NetBeans) gerarem automaticamente os \textit{build files}, caso a versão do IDE mude ou se queira mudar de IDE, é conveniente para o programador criar o seu próprio \textit{build file}.	
204
\subsubsection{Exemplos}
205
\begin{figure}[h]
206
\includegraphics[scale=0.5]{ANT.png}
207
\caption{Exemplo de condicional utilizado num \textit{build file}}
208
\end{figure}
209
\begin{verbatim}[h]
210
$ cat > build.xml
211
<project default="hello">
212
  <target name="hello">
213
    <javac srcdir="."
214
           includeantruntime="false"
215
           destdir="."/>
216
  </target>
217
</project>
218

  
219
$ cat > Hello.java
220
public class Hello {
221
  public static void
222
  main(String[] args) {
223
    String msg = "Hello, World!";
224
    System.out.println(msg);
225
  }
226
}
227
\end{verbatim}
228
Da mesma forma que nos \textit{Makefiles} existe um \textit{target} e uma instrução associada. De certa forma é semelhante ao uso do \LaTeX ou do HTML na medida em que é indicado um \textit{begin} e um \textit{end} para cada \textit{target/project}, etc. 
229
É também vísivel a  possibilidade de programar utilizando a linguagem Java dentro dum ficheiro \textit{build.xml}.
204 230

  
231
\subsection{Conclusão - Ant}
232
Para lidar com projectos Java, o \textit{Ant build} é superior ao \textit{GNU make} mas, como em tudo na Informática, existe muito debate entre os programadores. Também parece ser mais fácil lidar com dependências entre sistemas operativos utilizando o \textit{Ant build} sempre que seja relativamente a projectos Java.
233
Por outro lado, a síntaxe dos \textit{build files} é mais complexa e menos legível. Em projectos muito grandes isto pode ser um grande contra à utilização do \textit{Ant build}. 
205 234
\part{CMake}
206 235
\label{part.cmake}
207 236
\chapter{BLA}

Also available in: Unified diff