Primeiro exemplo

Agora, vamos criar um primeiro projeto
Atenção:
Para o foxmake funcionar, é necessário que o g++ esteja acessível no seu sistema operacional. Ou gcc, caso queira compilar arquivos C, necessitando especificar que deseja compilar com gcc, e não, g++.

Se estiver no windows, pode instalar o mingw64 através do site:
https://www.mingw-w64.org/

Ou do repositório do mingw-build-binaries: https://github.com/niXman/mingw-builds-binaries/releases

Crie um programa para ser compilado e linkado. Então faça o seguinte:

Na raiz do projeto crie o arquivo main.cpp e coloque nele o seguinte conteúdo:

#include <iostream>

using namespace std;

int main() {
    cout "Hello world!" << endl;
    return 0;
}

Depois de criado o programa, seu projeto deve ter a seguinte estrutura:

helloworld
└── main.cpp

Agora faça o seguinte:

  1. Instale o foxmake, se não já estiver instalado
  2. Crie o arquivo FoxMakefile com o seguinte conteúdo na raiz do seu projeto:
    Se estiver no linux coloque:
    output.file.name=executavel
    Se estiver no windows coloque:
    output.file.name=executavel.exe
  3. Agora execute o seguinte comando no shell:
    foxmake compile link
    Você também poderia executar com a tarefa "build" ou "buildall". A tarefa build inclue: clean, compile, link, copy. E a tarefa buildall inclue: clean, compileall, link, copy.
  4. Execute o executável criado:
    Se estiver no linux execute:
    ./executavel
    Se estiver no windows execute:
    .\executavel.exe

Se tudo ocorreu bem, o seu projeto deve ter agora a seguinte estrutura:

helloworld
├── FoxMakefile
├── executavel
├── __lwtimes.txt
├── main.cpp
└── obj
    └── src
        └── main.o    

Foi criada uma pasta: obj. A pasta obj é para onde foram os arquivos resultantes da compilação (os arquivos objeto). Se houvesse uma pasta bin, o executável linkado iria para ela. Como ela não foi configurada no script, o executável vai para pasta raiz do projeto.

Repare que foi criado também um arquivo __lwtimes.txt. Esse arquivo é um arquivo de propriedades. Onde, as chaves representam os arquivos de código fonte (headers e implementações), e os valores, representam o tempo de última alteração desses arquivos no momento da última compilação.

A cada compilação, o arquivo _lwtimes.txt é atualizado (ou criado, caso não já exista). Na próxima compilação, se não for especificada a tarefa compileall ou outra que também compila todos os arquivos, esse arquivo é verificado para compilar apenas os arquivos modificados após as datas correspondentes gravadas nesse arquivo.

Trata-se de uma compilação inteligente, onde é compilado somente o necessário para diminuir o tempo necessário para compilação do código fonte.

Para baixar o projeto "helloworld" abordado nessa página, acesse:

Download: helloworld.zip.

Recomendação

É recomendável configurar as pastas src, bin e build para o projeto ficar mais organizado, como será ensinado na próxima aula.

Próxima aula

O próxima aula ensina como criar e configurar as pastas "src", "bin" e "build" para organizar melhor o projeto.