我当前的项目工作流如下:
我希望能够在Visual代码中调试我的项目。为此,我定义了通过catkin构建可执行文件的任务,名为"catkin build all",并将第二个任务定义为:
{
"type": "shell",
"label": "load programs",
"command": "source /some_folder/setup.sh",
"group": "build",
"dependsOn": ["catkin build all"]
}这是我的lanuch.json启动配置的"preLaunchTask“。
启动调试将正确编译项目,但执行失败时会出现“启动:程序myProgram不存在”的错误。实际上,如果没有MyProgram源,程序setup.sh是找不到的,而是应该由"preLaunchTask“提供的。
在我的launch.json中,我也可以将"program“设置为"/full/path/ to /myProgram”,而不是"myProgram",但是在本例中,没有找到共享库,因为setup.sh会处理这个问题。
我还尝试在shell上源setup.sh,然后从同一个shell启动visual代码,但这并没有解决“启动:程序myProgram不存在”的问题。
任务是否运行在不同的shell上?如何让preLaunchTask在与后续程序代码相同的shell中运行?或者其他关于如何让我的工作流程正常工作的提示?
发布于 2019-10-14 15:09:51
我的解决方案是使用env_file
在一个终端中,源文件(如:source /opt/ros/melodic/setup.bash )
使用:printenv | grep melodic恢复更改
使用环境变量在repo中创建一个.env文件;(PWD除外)
LD_LIBRARY_PATH=/opt/ros/melodic/lib
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
CMAKE_PREFIX_PATH=/opt/ros/melodic
ROS_ROOT=/opt/ros/melodic/share/ros
PYTHONPATH=/opt/ros/melodic/lib/python2.7/dist-packages
ROS_PACKAGE_PATH=/opt/ros/melodic/share
PATH=/opt/ros/melodic/bin:/home/alexis/.nvm/versions/node/v8.16.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PKG_CONFIG_PATH=/opt/ros/melodic/lib/pkgconfig
ROS_DISTRO=melodic在launch.json任务中添加以下行:"envFile": "${workspaceFolder}/.env"
注意:这可以在prerunTask中使用以下方法实现自动化:
command: "source /opt/ros/melodic/setup.bash; printenv | grep melodic > ${workspaceFolder}/.env"发布于 2019-10-12 07:04:21
https://stackoverflow.com/questions/58289147
复制相似问题