Projeto QTCreator com múltiplos libs e um exe
Pergunta
Como eu disse em uma pergunta anterior, estou planejando portar um projeto QT do VC ++ para o Qtcreator.
O projeto consiste em 4 subprojetos: 3 deles são Libs e o último faz o exe. Os subprojetos são em camadas, o que significa que cada camada tem compilação e vinculação dependências de tempo às camadas abaixo dela.
Os arquivos são organizados da seguinte forma:
root
lib1
lib2
lib3
main
Eu criei cada um dos subprojetos no qtcreator do zero. Cada pasta contém um arquivo pro com o mesmo nome (por exemplo: lib1 -> lib1.pro). Usando essa abordagem, criei todos os projetos, exceto a última que deve vincular o executável. Eu estava recebendo erros de ligação que corrigi editando manualmente o arquivo Pro e adicionando o código abaixo:
LIBS += ../path/lib1.a \
../path/lib2.a \
../path/lib3.a
Tudo está bem, exceto agora que o Lib3 reclama que não consegue encontrar os símbolos da lib2 e Lib1. Addind Libs ao arquivo lib2.pro não funciona.
Tenho a sensação de que não estou conseguindo como o Qtcreator funciona com Libs e executáveis. Como você organizaria esse projeto para que ele compilasse e vincule corretamente?
Solução
Depois de trabalhar mais no problema, lembrei -me de que, para a cadeia de ferramentas do GCC, a ordem dos parâmetros do vinculador é importante.
A reversão das entradas da LIBS fez o truque.
Outras dicas
Fico feliz em ver que você encontrou a resposta. Você também pode querer adicionar:
CONFIG += ordered
para seus diretórios raiz. O arquivopro (ele é válido apenas no perfil 'subdirs'). Ele força QMake a gerar arquivos make que preservam a ordem em que você os listou em todas as circunstâncias.