Fenner
Compilador

Linha de comando

O fc e suas opções, o que ele grava e como ele diz o que está errado.

texto
fc <arquivo.fxp> [opções]

O fc lê um projeto (.fxp), traz os módulos de que ele precisa e grava o executável (ou a DLL). A linha de comando carrega pouco de propósito: a plataforma e o modo. Todo o resto (otimização, mapa, depuração, caminhos, símbolos) mora no arquivo de configuração.

Opções#

OpçãoEfeito
-o <arquivo>nome do executável de saída
-O0 … -O3nível de otimização (padrão -O3)
-ginformação de depuração: grava <saída>.pdb
-mapgrava o mapa de símbolos do ligador: <saída>.map
-D<símbolo>define um símbolo de compilação condicional
-P<plataforma>alvo: -PMSWin64 (padrão), -PMSWin32, -PLinux64
-M<modo>modo de compilação: -MDebug, -MRelease… (o fc.config declara quais valem e o padrão)
--NoPackagesnão liga package nenhum: a RTL vai inteira dentro do binário. Sem esta opção vale o RtlPackage da configuração (a runtime compartilhada)
-rtldll <mapa>a RTL vem de uma DLL; <mapa> é o .fxnames do package que a contém
-log[:arquivo]log do progresso com hora em cada linha (padrão fc.log); serve para achar travamento e lentidão
--wclstyleslista os estilos visuais da WCL embutidos neste compilador
terminal
fc Meu.fxp -PMSWin64 -MRelease
fc Meu.fxp -O0 -g -o Meu.exe

O que ele grava#

Ao lado do executável (ou na pasta de saída da configuração), o fc grava:

ArquivoQuando
<nome>.exe ou <nome>.dllsempre
<nome>.fxdepsa lista de tudo o que a compilação leu (o projeto, o .config, cada módulo, cada include, a RTL e o próprio fc.exe); o RAD a usa para saber se o executável está desatualizado
<nome>.pdbcom -g
<nome>.mapcom -map
<nome>.rtti.jsoncom a chave Rtti ligada
.fxd e .fxnamesnum projeto package

Variáveis de ambiente#

VariávelEfeito
FC_RTLonde está a RTL (o mesmo que a chave RtlSource da configuração)
FC_TIME=1mede e imprime o tempo de cada etapa
MYCOMPILER_SYSROOTnum alvo Linux, onde estão crt1.o e a libc

As mensagens#

O compilador escreve cada mensagem no formato

texto
arquivo(linha,coluna): Severidade: texto

com três severidades: Erro, Aviso e Dica. A saída termina com Executável gerado: <nome> se tudo deu certo, e com o código de saída diferente de zero se houve erro. Um {$message} do fonte (veja Diretivas) aparece no mesmo formato, com a severidade que ele pediu.

Como as mensagens seguem o formato arquivo(linha,coluna), editores e ferramentas as lêem sem adaptação. A extensão do VS Code traz um leitor para cada severidade.

Dentro de um editor#

Para compilar de dentro do VS Code, copie tasks-exemplo.json da extensão para .vscode\tasks.json. Ctrl+Shift+B compila o arquivo aberto, e os erros caem no painel de Problemas. No RAD, Ctrl+F9 compila e F9 executa.