Je traduisais une librarie utilisant Qt lorsque j'ai rencontré cette erreur.

[ 44%] Generating foo_fr.ts
Bar.cpp:40: Qualifying with unknown namespace/class ::Bar
Updating 'foo_fr.ts'...
    Found 3 source text(s) (3 new and 0 already existing)

Je n'ai pas trouvé beaucoup d'information concernant cette erreur sur internet. Heureusement, je suis tombé sur cet article de StackOverflow qui m'a guidé vers une solution au problème.

Le problème provient du design de la librarie. Ses fichiers d'entête ne sont pas dans le même répertoire que ses fichiers d'implémentation.

Foo
|-- include
|   '-- foo
|       '-- Bar.hpp
+-- src
|   |-- Bar.cpp
|   +-- CMakeLists.txt
+-- CMakeLists.txt

Ceci pose problème parce que les utilitaires de traduction de Qt s'attendent à retrouver les fichiers d'entête dans le même répertoire que les fichiers d'implémentation. Si ce n'est pas le cas, on doit spéficier le répertoire des fichiers d'entête lorsqu'on utilise lupdate. Puisque la librarie que je traduisais est compilée à l'aide de CMake, il suffit d'utiliser la macro qt5_create_translation à laquelle on ajoute l'option -I suivie du répertoire des fichiers d'entête au paramètre OPTIONS.

qt5_create_translation(QM_FILES
    Bar.cpp
    foo_fr.ts
    OPTIONS -I ${CMAKE_CURRENT_SOURCE_DIR}/../include
)