Pra quem ainda usa a IDE xDevStudio.
Script modificado para compilar com HARBOUR 3.0 ou SUPERIOR + BCC ou MINGW // IDE xDevStudio 7.0
salvar o codigo abaixo com o nome "Harbour.xCompiler.prg" e sobreescrever o existente na pasta script da xDevStudio.
Código: Selecionar todos
/*
* FOZ DO IGUAÇU - PR 29-09-23 @ 18:41
* MODIFICADO POR DEIVID SOUZA
* COMPILAR EM HARBOUR 3.0 OU SUPERIOR
* BCC / MINGW
* --------------------------------------------------
* Harbour.xCompiler.prg / xDevStudio 7.0
* -------------------------------------------------
*
* Arquivo contendo os comandos de Script para processamento de um projeto
* Harbour modo CONSOLE com Borland BCC ou MinGW.
*/
#define CRLF Chr(13)+Chr(10)
function Prepare
type := Project( 'TargetType' )
if FileExists( 'harbour.exe', m_PreSetPath ) .or. ;
FileExists( 'hb.exe', m_PreSetPath )
else
MsgError( 'O arquivo principal do compilador não existe!' )
return .f.
end
if !FileExists( 'bcc32.exe', m_PreSetPath )
MsgError( 'O arquivo requerido BCC32.EXE não foi localizado no sistema!' )
return .f.
end
if !FileExists( 'hbmk2.exe', m_PreSetPath )
MsgError( 'O arquivo requerido hbmk2.EXE não foi localizado no sistema!' )
return .f.
end
/*
* 30/9/2006 21:02:35
* Aqui neste ponto setamos a variavel abaixo como SIM, indicando
* que desejamos recompilar todo o projeto. Caso o valor dela seja .F.
* a xDev irá compilar e linkar usando o padrao solicitado pelo
* programador que estiver usando a xDev.
*/
m_bCompileAll := SameText( fForceCompileAll, 'sim' )
return .t.
function UnPrepare
return .t.
/*
* Esta função é executada, sempre que a xDev precisar compilar um arquivo .PRG
*/
function OnFilePRG
* Preparamos a linha de comando
cmd := 'harbour.exe'
cmd += ' ' + m_sFileName + ''
cmd += ' /q /o' + m_sOutPut
cmd += ' ' + fFlagA + ' ' + fFlagL + ' ' + fFlagM + ' ' + ;
' ' + fFlagN + ' ' + fFlagZ + ' ' + fFlagP
* Verificarmos se ele nao quer desativar o DEBUG para este módulo em específico!
* para isto usamos a funcao SameText() que compara os 2 argumentos ignorando
* letras maiúsculas / minúsculas.
*
if !SameText( PRG_DisableDebug, 'sim' )
cmd += ' ' + fFlagB
end
*/
* Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
aDefs := Alltrim(CustomDefines) + ',' + ; // Diretrivas gerais do projeto
Alltrim(PRG_Defines) + ',' + ; // Diretrivas específicas deste arquivo
Alltrim(m_PreSetDefines) // Estas sao as diretrivas do PROJETO e do PRESET atual
aDefs := StrTran(aDefs, ';', ',' )
aDefs := StrTran(aDefs, ' ', '' )
aDefs := ListAsArray( aDefs, ',')
cmd := alltrim( cmd )
for i := 0 to len( aDefs )
if !Empty(aDefs[i])
cmd += ' /D' + aDefs[i]
end
next
* Isto inclui os #DEFINEs de cada versao do xHb e do HB específicas
if !Empty(m_PresetConstants)
cmd += m_PresetConstants
end
* Colocamos os outros parametros (se houver)
cmd := alltrim( cmd )
cmd += " " + fMiscOption1
* Executamos o comando específico para compilar
runBat(cmd)
bOk := (ErrorLevel() == 0)
return bOk
/*
* Esta função é executada, sempre que a xDev precisar compilar um arquivo .C/.CPP
*/
function OnFileC
* Preparamos a linha de comando
aLines := {}
* Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
aDefs := Alltrim(CustomDefines) + ',' + ; // Diretrivas gerais do projeto
Alltrim(PRG_Defines) + ',' + ; // Diretrivas específicas deste arquivo
Alltrim(m_PreSetDefines) // Estas sao as diretrivas do PROJETO e do PRESET atual
aDefs := StrTran(aDefs, ';', ',' )
aDefs := StrTran(aDefs, ' ', '' )
aDefs := ListAsArray( aDefs, ',')
cmd := alltrim( cmd )
for i := 0 to len( aDefs )
if !Empty(aDefs[i])
AAdd( aLines, '-D' + aDefs[i])
end
next
* Isto inclui os #DEFINEs de cada versao do xHb e do HB específicas
if !Empty(m_PresetConstants)
AAdd( aLines, m_PresetConstants)
end
* Ajustamos os outros parametros
AAdd( aLines, '-I' + m_PreSetInclude)
AAdd( aLines, '-L' + m_PreSetLib + ';' +m_PreSetObj)
AAdd( aLines, '-o' + m_sOutPut)
AAdd( aLines, m_sFileName )
/**
* Salvamos e executamos o comando específico para compilar
MemoWrite( 'b32.bc', aLines )
runBat('BCC32 -M -c @B32.BC')
*/
bOk := (ErrorLevel() == 0)
return bOk
/*
/*
* Esta função é executada, sempre que a xDev precisar compilar um arquivo .RC
*/
function OnFileRC
cmd := FindFile( 'brc32.exe', m_PreSetPath )
if Empty(cmd)
cmd := FindFile( 'porc.exe', m_PreSetPath )
end
if Empty(cmd)
MsgError( 'Erro ao localizar o aplicativo necessário para compilar o módulo "'+m_sFileName+'"!' )
return .f.
end
* Preparamos a linha de comando
cmd += ' -r -fo"' + m_sOutPut + '" -i"' + m_PreSetInclude +'"'
* Verificamos as diretrivas #DEFINEs e adicionamos ela na linha de comando!
aDefs := Alltrim(CustomDefines) + ',' + ; // Diretrivas gerais do projeto
Alltrim(PRG_Defines) + ',' + ; // Diretrivas específicas deste arquivo
Alltrim(m_PreSetDefines) // Estas sao as diretrivas do PROJETO e do PRESET atual
aDefs := StrTran(aDefs, ';', ',' )
aDefs := StrTran(aDefs, ' ', '' )
aDefs := ListAsArray( aDefs, ',')
cmd := alltrim( cmd )
for i := 0 to len( aDefs )
if !Empty(aDefs[i])
cmd += ' -D' + aDefs[i]
end
next
* Isto inclui os #DEFINEs de cada versao do xHb e do HB específicas
if !Empty(m_PresetConstants)
cmd += m_PresetConstants
end
* Ajustamos os outros parametros
cmd += ' "' + m_sFileName + '"'
* Executamos o comando específico para compilar
run (cmd)
bOk := (ErrorLevel() == 0)
return bOk
function OnBuild
return BuildExe()
function BuildExe()
* Preparamos a linha de comando
aLines := {}
AAdd( aLines, '-I' + m_PreSetInclude)
AAdd( aLines, '-L' + m_PreSetLib + ';' +m_PreSetObj)
AAdd( aLines, '-o' + m_sOutPut)
aFiles := Project( "*.PRG" )
t := Len( aFiles )
FOR i := 1 TO t
IF i == t
AADD( aLines, aFiles[i] )
ELSE
AADD( aLines, aFiles[i] )
End
End
//################################
//## AJUSTE DE COMPILAÇÃO #
//################################
AADD( aLines, '-workdir=./obj' ) // PASTA OBJ
AADD( aLines, '-inc' ) // COMPILA SOMENTE .PRG MODIFICADOS
AADD( aLines, '-dhb' )
if !SameText( PRG_DisableDebug, 'sim' )
AADD( aLines, '-b' ) // DEBUG
AADD( aLines, '-debug' )
endif
//################################
//## TENTA COMPACTAR EXECUTAVEL #
//################################
if SameText( fUseUPX, 'Sim' )
AADD( aLines, '-compr=max' )
end
//################################
//## EXECUTA PROGRAMA #
//################################
AADD( aLines, '-run' )
/*
* Chamamos a função que pega o nome das libs corretas
*/
DefaultLibs()
/*
* Põe os RCs project files
*/
aFiles := Project( "*.RES" )
FOR i := 1 TO Len( aFiles )
IF i == t
AADD( aLines, aFiles[i] )
else
AADD( aLines, aFiles[i] )
End
End
MemoWrite( 'b32.hbp', aLines )
runBat('hbmk2 @B32.HBP')
bOk := (ErrorLevel() == 0)
function DefaultLibs()
Libs := .T.
//ADICIONA LIBS
AADD( aLines, 'xhb.hbc' )
AADD( aLines, 'hbct.hbc' )
AADD( aLines, 'hbhpdf.hbc' )
/*
* Incluimos os arquivos .LIB no projeto. O segundo parametro .T. indica que
* queremos TODOS os arquivos ATÉ MESMO AQUELES MARCADOS com a opção
* compile=FALSE, por isto usamos um parametro .T.
*
* Quando omitimos o segundo parametro, ele puxará apenas os arquivos
* marcados como COMPILE=TRUE e desde modo, irá ignorar os arquivos .LIB
*/
aFiles := Project( "*.LIB" )
FOR i := 1 TO Len( aFiles )
AADD( aLines, '"'+aFiles[i]+'" + ' )
End
if SameText( CustomLIBs, 'Sim')
/*
* Se ele tem a lista de LIBs personalizada, caimos fora!
*/
else
if SameText( fFlagB, '/B' )
AADD( aLines, '-b' )
end
if SameText( fUseHBDLL, 'sim' )
***
elseif !Libs
***
else
if SameText( fGUILib, 'Gtwvg' )
*
AADD( aLines, 'gtwvg.hbc' )
elseif SameText( fGUILib, 'Gtwvw' )
*
AADD( aLines, 'gtwvw.hbc' )
*
end
end
end
return