Configuração
O fc.config e o <projeto>.config — plataformas, modos, ajustes por escopo, variáveis e constantes.
A linha de comando carrega apenas duas informações: a plataforma (-P<Plataforma>) e o modo (-M<Modo>). Todo o resto mora em arquivos de configuração.
fc Meu.fxp -PMSWin64 -MReleaseOs três arquivos#
O fc lê até três arquivos, nesta ordem, e o de baixo vence:
| # | Arquivo | Onde | Versionar? |
|---|---|---|---|
| 1 | fc.config | ao lado do fc.exe | não: são os padrões da máquina |
| 2 | <projeto>.config | ao lado do .fxp | sim |
| 3 | <projeto>.config.local | ao lado do .fxp | não: ajustes do desenvolvedor |
Para C:\App\Meu.fxp, o fc procura Meu.config e Meu.config.local em C:\App\. Sem nenhum arquivo, ele usa os padrões (a RTL em ..\rtl, relativa à pasta do fc.exe).
Formato#
Duas famílias de linha: declarações (o vocabulário do projeto) e ajustes (o que cada combinação vale). Uma linha começada por # é comentário.
Declarações#
Platform MSWin64 # plataforma aceita em -P
Platform MSWin32
Mode Debug # modo aceito em -M
Mode Release
Default Platform MSWin64 # usada quando não há -P
Default Mode Debug # usado quando não há -M
PlatformMode <Nome> <Plataforma> <Modo> # combinação NOMEADA; "*" = todosMode aceita qualquer nome: Debug e Release são só a convenção, e nada impede Mode Profile ou Mode Homolog. As combinações nomeadas são o que os ajustes usam como escopo:
PlatformMode MSWin64 MSWin64 *
PlatformMode Release * Release
PlatformMode MSWin64Release MSWin64 ReleaseAll é embutido (vale sempre, não precisa declarar). Um nome de plataforma também serve de escopo mesmo sem PlatformMode.
Ajustes#
<Tipo> <Escopo> <Chave> [Valor]O escopo é obrigatório: use All para valer sempre.
| Tipo | Forma | Efeito |
|---|---|---|
Config | Config <Escopo> <Chave> <Valor> | opção do compilador (tabela abaixo) |
UserVar | UserVar <Escopo> <Nome> <Valor> | variável usável como ($Nome) |
Define | Define <Escopo> <Símbolo> | liga um símbolo condicional (como -D) |
SysConst | SysConst <Escopo> <Nome> <Valor> | constante nomeada, que vira literal no código |
Um escopo só é aplicado quando a combinação dele casa com a plataforma e o modo desta compilação. Entre os que casam, vence o mais específico (o que tem menos *):
All (0) < MSWin64 ou Release (1) < MSWin64Release (2)Um escopo não declarado gera aviso: não some em silêncio.
Chaves de Config#
| Chave | Valor | Efeito |
|---|---|---|
RtlSource | diretório | onde estão os fontes da RTL (equivale a FC_RTL) |
RtlBinary | diretório | cache de objeto da RTL (padrão: %LOCALAPPDATA%\fc\rtlcache) |
OutputPath | diretório | onde cai a saída; também alimenta ($OutputPath) |
ExeOutput | caminho | caminho completo do .exe (mais forte que OutputPath) |
DllOutput | caminho | caminho completo do .dll (de uma library) |
SourcePath | dirs separados por ; | busca extra de uses e {$include}; acumula entre escopos |
Optimization | O0…O3 | nível de otimização (aceita O2, -O2 ou 2) |
Map | on/off | gera o .map do ligador |
Debug | on/off | informação de depuração (CodeView/PDB) |
Rtti | on/off | gera <saída>.rtti.json |
AppType | GUI/CONSOLE | subsistema do PE (padrão CONSOLE) |
LinkPackage | .fxd | package que serve de runtime compartilhada |
RtlPackage | caminho | o package de runtime em DLL que o projeto usa |
UnlinkPackage | .fxd | cancela um LinkPackage vindo de um .config acima |
on/off aceita on, true, sim, yes, 1, e a chave sozinha, sem valor, também liga (Config Debug Map).
Variáveis ($Nome)#
Expandidas dentro dos valores. Embutidas:
| Variável | Valor |
|---|---|
($FcPath) | diretório do fc.exe (sem barra final) |
($ProjectPath) | diretório do projeto (sem barra final) |
($ProjectName) | nome-base do projeto (sem extensão) |
($Platform) | plataforma efetiva (MSWin64/MSWin32/Linux64) |
($Mode) | modo efetivo (Debug, Release, …) |
($PlatformMode) | os dois concatenados (MSWin64Release) |
($OutputName) | = ($ProjectName); um UserVar OutputName sobrepõe |
($OutputPath) | = ($ProjectPath); Config OutputPath ou UserVar sobrepõem |
($PlatformMode) é o que dá saídas separadas sem repetir regra:
Config All OutputPath ($ProjectPath)\Output\($PlatformMode)\→ Output\MSWin64Debug\Meu.exe e Output\MSWin64Release\Meu.exe.
UserVars são resolvidas antes dos Config, e podem referenciar as embutidas e outras já definidas. Um nome desconhecido fica literal, o que ajuda a depurar.
SysConst: constantes nomeadas#
Cada uso do nome no código vira o literal no lugar, resolvido em tempo de compilação. O nome é case-sensitive (como todo identificador) e sombreia um símbolo homônimo.
- entre apóstrofos → texto:
SysConst All AppName 'MeuApp v2' - só dígitos (sinal opcional) → inteiro:
SysConst All BuildNum 1234 - qualquer outra coisa → texto
WriteLn('versão ', AppName, ' build ', IntToUStr(BuildNum)); // BuildNum é Int64 de verdadeExemplo completo#
# fc.config -- ao lado do fc.exe
Platform MSWin64
Platform MSWin32
Mode Debug
Mode Release
Default Platform MSWin64
Default Mode Debug
PlatformMode MSWin64 MSWin64 *
PlatformMode MSWin32 MSWin32 *
PlatformMode Debug * Debug
PlatformMode Release * Release
PlatformMode MSWin64Debug MSWin64 Debug
PlatformMode MSWin64Release MSWin64 Release
Config All RtlSource ($FcPath)\..\rtl
Config All OutputPath ($ProjectPath)\Output\($PlatformMode)\
Config Debug Optimization O0
Config Debug Debug on
Config Debug Map on
Config Release Optimization O2
Define Debug DEBUG
Define Release RELEASE# Meu.config -- do projeto, versionado
Config All RtlPackage ($FcPath)\..\Packages\Fenner.BedRock
Config MSWin32 Optimization O1
Define MSWin32 CPU32# Meu.config.local -- NÃO versionar
Config All RtlSource D:\rtl-de-testePrecedência#
.config.local > <projeto>.config > fc.confige, dentro de cada arquivo, o escopo mais específico vence. Da linha de comando vêm só -P, -M, -D<símbolo> e -o (saída explícita).
O que o RAD escreve#
Um projeto criado pelo RAD já nasce com um .config assim, com os modos Debug, Release e Fast:
Platform MSWin64
Default Platform MSWin64
Mode Debug
Mode Release
Mode Fast
Default Mode Fast
PlatformMode All * *
PlatformMode MSWin64 MSWin64 *
PlatformMode Debug * Debug
PlatformMode Release * Release
PlatformMode Fast * Fast
Config All RtlSource C:\Fenner\Common\BedRock\rtl
Config All SourcePath ($ProjectPath)\src
Config All AppType GUI
Config All OutputPath ($ProjectPath)\bin
Config Debug Optimization O0
Config Debug Debug on
Config Release Optimization O2
Config Fast Optimization O0