将RQt插件移植到Windows
目录
RQt移植示例
这里是`qt_gui_core <https://github.com/ros-visualization/qt_gui_core/commit/6fb9624033a849f56d1bc1aad0e40d252bf99c2b>`_的ROS 2移植版本。
这里是`python_qt_binding <https://github.com/ros-visualization/python_qt_binding/pull/56>`__的ROS 2移植版本。
Windows 10 的注意事项
使用``__cplusplus``的代码和需要pluginlib的代码
在某些地方,尤其是在pluginlib的ROS 2端口中,使用了``__cplusplus``标志。不幸的是,在Windows Visual Studio上,无论实际使用的C++标准是什么,都无法正确设置该标志。有关更多信息,请参阅`此页面<https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus?view=vs-2017>`__。
要设置它,您需要添加编译选项``/Zc:__cplusplus``。
例如,在CMake中,您可以这样做:
target_compile_options(${PROJECT_NAME} PUBLIC "/Zc:__cplusplus")
构建产物的位置(安装前)
这个问题只在构建 qt_gui_cpp
时出现。在这个软件包中,自定义命令依赖于软件包的另一个部分中的目标库。然而,在构建完成之前,该库不会被安装。Windows 构建位于 ${configuration} 目录中。例如:
在 Linux 上,qt_gui_cpp.a
将会构建在:<ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/
但是在 Windows 上,qt_gui_cpp.lib
将会构建在:<ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/Release
为了在这种情况下实现跨平台兼容性,请使用 CMake 生成器表达式。然而,在需要链接库时,请确保使用 $<TARGET_LINKER_FILE:_target>
而不是 $<TARGET_FILE:_target>
。后者会找到 .dll
文件,在Windows上无法链接。参见 此处的示例。
编译器和链接器标志
通常在移植到Windows时,许多软件包可能会使用额外的编译器标志。您可以在 Microsoft 的文档 中找到Windows编译器标志。C++编译器称为 cl.exe
。
有关链接器标志,请参阅 Microsoft 的文档。链接器程序称为 link.exe
。
然而,CMake实际上在变量中提供了许多这些选项。这个`StackOverflow页面<https://stackoverflow.com/questions/9298278/cmake-print-out-all-accessible-variables-in-a-script>`__提供了一个很好的示例,可以查看脚本中所有可用的CMake变量。