Portage des plugins RQt vers Windows

Exemples de portage RQt

Voici le port ROS 2 de qt_gui_core.

Voici le port ROS 2 de python_qt_binding.

Considérations pour Windows 10

Problèmes avec TinyXML version 1

Je n’ai pas pu utiliser TinyXML avec succès. J’ai mis à niveau vers TinyXML-2 si nécessaire. C’est un changement assez simple.

Consultez ce PR pour un exemple de portage vers TinyXML-2.

Code qui utilise __cplusplus et code qui nécessite pluginlib

À certains endroits, notamment dans le port ROS 2 de pluginlib, le drapeau __cplusplus est utilisé. Malheureusement, sous Windows, Visual Studio ne définit pas correctement cet indicateur, quel que soit le standard C++ réellement utilisé. Voir cette page pour plus d’informations.

Pour le définir, vous devez ajouter l’option de compilation /Zc:__cplusplus.

Par exemple, dans CMake, vous pourriez faire quelque chose comme ceci :

target_compile_options(${PROJECT_NAME} PUBLIC "/Zc:__cplusplus")

Emplacements des artefacts de build (avant l’installation)

Cela n’est apparu que lors de la construction de qt_gui_cpp. Dans ce package, une commande personnalisée dépend d’une bibliothèque cible dans une autre partie du package. Cependant, cette bibliothèque n’est pas installée tant que la construction n’est pas terminée. Windows construit dans un répertoire ${configuration}. Par example:

Sous Linux, qt_gui_cpp.a serait intégré : <ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/

Mais sous Windows qt_gui_cpp.lib est construit dans <ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/Release

Pour assurer la compatibilité entre les plates-formes dans cette situation, utilisez CMake generator expressions. Cependant, lorsque vous avez besoin d’une bibliothèque à lier, assurez-vous d’utiliser $<TARGET_LINKER_FILE:_target> au lieu de $<TARGET_FILE:_target>. Ce dernier trouvera les fichiers .dll, qui ne peuvent pas être liés sous Windows. Voir un exemple ici.

Drapeaux du compilateur et de l’éditeur de liens

En général, lors du portage vers Windows, de nombreux packages peuvent utiliser des indicateurs de compilateur supplémentaires. Vous pouvez trouver les drapeaux du compilateur Windows sur la documentation de Microsoft . Le compilateur C++ s’appelle cl.exe.

Pour les drapeaux de l’éditeur de liens, consultez la documentation de Microsoft. Le programme de liaison s’appelle link.exe.

Cependant, CMake fournit en fait bon nombre de ces options dans des variables. Cette page StackOverflow contient un bon exemple de la façon de voir toutes les variables CMake disponibles dans un scénario.