Pergunta

Recentemente eu ter instalado VS Addin da Qt Software e eu importado meu projeto .pro para VS2008. Geralmente, tudo funciona bem, com um pequeno, mas irritante exceção.

Suponha que eu tenho um file.cpp com tem uma classe que declara que é um Q_OBJECT. Então, como tal, o arquivo é MOC-ed e moc_file.cpp é gerado, e está disponível em Solução em "arquivos gerados". Até aqui tudo bem.

O engraçado é que, quando eu mudar alguma coisa em file.cpp (adicionar uma linha, por exemplo), e salve o arquivo usando Ctrl + S, o moc_file.cpp torna-se excluídos da construção (você pode ver um sinal nenhuma entrada no ícone). E eu bati um monte de erros de vinculador típicos quando eu pressionar F7 para construir uma solução. A fim de corrigir a situação, eu preciso ir para as propriedades do moc_file.cpp e mudança "Excluir da construção" de "Sim" para "Não". Em seguida, tudo funciona bem.

É alguém experimentando o mesmo? Estou fazendo algo errado?

Foi útil?

Solução

Problema resolvido. Eu descobri que no meu arquivo .pro artesanal descrevendo o meu projeto, eu tive MOC_DIR especificado como:

MOC_DIR = .moc

Depois de importar para o diretório Visual Studio para "arquivos gerados" era o mesmo tanto para lançamento e de depuração. Então, quando a minha configuração ativa foi de depuração por exemplo, quando eu salvo um arquivo tornou-se excluídos da construção porque era sensata para arquivo Release relacionadas - assim como rpg e Andrew sugeriu. Depois de mudar o diretório para .moc \ $ (ConfigurationName) o problema não é mais visto (e eu ver 2 versões de cada arquivo gerado na minha solução - um para cada configuração).

Obrigado por sua ajuda todos!

Outras dicas

Na verdade, eu encontrei a solução para esse "recurso". Você tem que adicionar os dois arquivos de GeneratedFiles \ Debug e GeneratedFiles \ Debug (ou de outros diretórios configurações). Qt irá excluir de construir tudo o que não pertence ao tipo de compilação selecionado.

Sim, eu uso o mais recente VS Addin e meu projeto é visto corretamente como um projeto Qt.

se você definir sua configuração corretamente?

Abra a janela "Configuração do Debug" Defina os seguintes itens a seguir indicados:

  • "linha de comando construir" qmake -project & qmake & nmake depuração
  • "comandos Limpo" nmake debug-clean
  • "Reconstruir linha de comando" qmake & nmake depuração

Repita o mesmo com o lançamento de configuração

Eu vi o excluídos do comportamento de construção no VS2008 (VS 2003 também), mas o projeto constrói corretamente. Quando você altera um arquivo moc'able, Qt terá que recriar o arquivo moc'ed porque ele está desatualizado.

Eu suspeito que o algoritmo do Qt é algo como:

  • detectar esse arquivo foi mudado
  • definir o arquivo moc antiga quanto excluídas da construção
  • adicionar um novo arquivo para o projeto com o mesmo nome e incluí-lo na construção

Olhando para o meu projeto VS 2003, eu posso ver que alguns arquivos moc_ * estão incluídas duas vezes no projeto, uma versão é definido como excluídos da construção e o outro não é.

Recriando o arquivo .vsproj usando qmake pode corrigir o problema.

Para cada arquivo QObject que você tem, o plugin QT cria um arquivo moc_ para cada configuração de compilação (geralmente apenas Debug e Release). Quando você alterar a configuração atual, você pode ver os sinais de entrada Não ir de um arquivo para o outro.
Os arquivos moc_ não deve mudar quando você mudar o arquivo .cpp. somente quando você alterar os arquivos .h .. Tudo isso me leva a coisa que algo de errado aconteceu com a sua configuração e realmente a melhor maneira de corrigi-lo é para recriá-lo com qmake usando algo parecido com isto:

qmake -spec win32-msvc2008
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top