Ainda tem gente com dificuldade nisso.
O problema é relativamente simples:
É que o programador acaba fazendo igual usuário, fica preocupado com os detalhes, e não com o funcionamento.
Compilação Clipper:
Compila PRG, que era OBJ
Linquedição Clipper:
a) pra gerar LIB: junta OBJ pra gerar LIB
b) pra gerar EXE: junta OBJ e LIB pra gerar EXE
Neste ponto, se faltar alguma coisa, o linqueditor vai mostrar a lista do que falta.
E aonde pode estar o que falta? ou num PRG que não foi compilado, ou num OBJ que não foi linqueditado, ou numa LIB que não foi linqueditada.
Também pode ser nome errado, por isso não acha o nome.
E no Harbour? Mesma coisa, exceto que:
- PRG é transformado em C primeiro, e depois compilado pra gerar o OBJ - até esquecemos que isso é feito porque o fonte C acaba sendo um temporário
- pode usar .C, que também é compilado pra gerar o OBJ
- Dependendo do compilador/linquedior, a extensão é diferente. O "OBJ" pode ter final ".o" ao invés de ".obj", e a lib final ".a" ao invés de ".lib"
- Também podem ser compilados resources (imagens,etc), que geram um OBJ
E se usar LIB externa?
Mesma coisa. Como já foi dito, a LIB é um conjunto de OBJs. Se faltar alguma coisa vai mostrar no final da linquedição.
De adicional, podemos usar declarações no fonte: #define K_ESC 27
Mas para teclado, já temos um arquivo preparado com tudo que é importante do teclado, seria o arquivo INKEY.CH, e basta colocar no fonte #include "inkey.ch".
Se faltar indicar o .CH, K_ESC seria considerado ser uma variável, poderia gerar erro em run-time de falta de variável, ou o mesmo na compilação se usar -w3 -es2
É isso que alguns programadores esquecem.
Se é minigui, hwgui, gtwvg, nenhuma gui, tanto faz.
A linquedição sempre vai procurar em tudo que foi indicado, vai juntar obj e lib, e vai mostrar o nome do que falta.
Com base no nome do que faltar, é o que vamos procurar prg, c, obj, lib, ch, etc.
É o mesmo até pra gerar o Harbour.
Não tá compilando? deve faltar o Harbour.exe ou o compilador C, ou o compilador de resource, ou no disco ou apenas no PATH
Não tá linqueditando? deve faltar o EXE do linqueditor, ou alguma lib ou algum obj, ou no disco ou no PATH
Os detalhes?
O detalhe é preso a cada uso de cada usuário.
Se faltar o compilador C: pra quem usa Borland é BCC/EXE, pra quem usa Msvc é CL.EXE, pra quem usa mingw é GCC.EXE
Isso nem precisa decorar: vai ser olhar o comando que o HBMK2 executa, e lá vai estar indicado o nome do EXE.
Imaginem o usuário anotar que precisa usar a opção 3, e se mudar o número pra 4 o usuário não saber mais.
É a mesma diferença se o programador ficar preso a nomes, ao invés de como funciona.
Basta o programador procurar o nome, mas como o programador costuma decorar nomes, só porque mudou o nome ele não sabe mais fazer...