如何使Cmake输出相对路径?;
在我上次删除的关于CMake的问题中,我提出了一个关于如何使CMake输出相对路径的问题,因为vscode的问题面板仅限于此 了解工作区下的Windows目录或相对路径 除非有特殊情况,否则这种情况不会发生。如果您在Windows中使用vsocde编辑源文件,并使用WSL作为终端使用CMake进行编译,您将发现vscode无法完美工作如何使Cmake输出相对路径?;,cmake,windows-subsystem-for-linux,Cmake,Windows Subsystem For Linux,在我上次删除的关于CMake的问题中,我提出了一个关于如何使CMake输出相对路径的问题,因为vscode的问题面板仅限于此 了解工作区下的Windows目录或相对路径 除非有特殊情况,否则这种情况不会发生。如果您在Windows中使用vsocde编辑源文件,并使用WSL作为终端使用CMake进行编译,您将发现vscode无法完美工作 问题面板将告诉您在编译完成后找不到错误或警告的源代码 gdb在调试时找不到源文件 (1) 第一个问题的解决方案:将以下代码添加到最外层的CMakeLists.tx
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_SOURCE_DIR}/custom_output.sh")
全局规则_LAUNCH_COMPILE属性设置为名为custom_output.sh的自定义启动脚本,该脚本需要添加到CMake源代码树的根目录中:
#!/bin/bash
# shell script invoked with the following arguments
# $(CXX) $(CXX_DEFINES) $(CXX_FLAGS) -o OBJECT_FILE -c SOURCE_FILE
# extract parameters
SOURCE_FILE="${@: -1:1}"
OBJECT_FILE="${@: -3:1}"
# invoke compiler
{ "$@" 2> >(sed 's@^/mnt/d/demo/@@'|sed "s/warning/${esc}[32m&${esc}[0m/g"|sed "s/error/${esc}[31m&${esc}[0m/g" >&3); } 3>&2
它还将在stderr上输出stderr消息,并将其转换为相对路径。其中“/mnt/d/demo/”是要删除的字符串。要删除的内容取决于源代码的相对路径
(2) 您可以使用gdb中的以下命令重新映射以解决第二个问题:
set substitute-path old_path new_path
您需要在launch.json中添加以下代码
"customLaunchSetupCommands": [
{
"text": "set substitute-path /mnt/d d:/",
"description": "change directory to workspace",
"ignoreFailures": false
}
]
"postLaunchCommands": ["set substitute-path /mnt/d d:/"]
如果使用Cortex debug进行调试,则应在launch.json中添加以下代码
"customLaunchSetupCommands": [
{
"text": "set substitute-path /mnt/d d:/",
"description": "change directory to workspace",
"ignoreFailures": false
}
]
"postLaunchCommands": ["set substitute-path /mnt/d d:/"]
使用日志文件将不可重入。只需在阅读时使用“$@”…。但是只要
“$@”| sed's^/mnt/d/demo@@@
或“$@”2>>(sed's^/mnt/d/demo@@@')
Och,再想一想,2>(sed's^/mnt/d/demo@@@')
将把stderr重定向到stdout。所以像{“$@”2>>(sed's^/mnt/d/demo@@@3);}3>&2
这样的东西会更好-它也会在stderr上输出stderr消息。请允许我向您表示最诚挚的感谢。