cmake - 如何让Cmake输出相对路径?
问题描述
在我上次删除的关于 CMake 的问题中,我提出了一个关于如何使 CMake 输出相对路径的问题,因为 vscode 的问题面板仅了解 Windows 目录或工作区下的相对路径。
除非某些特定情况,否则不会发生这种情况。如果你在 Windows 中使用 vsocde 编辑源文件,并使用 WSL 作为终端使用 CMake 编译,你会发现 vscode 无法完美运行。
- 问题面板会告诉你编译完成后找不到错误或警告的源代码。
- gdb 调试时找不到源文件。
解决方案
(1)第一个问题的解决方法:在你最外层的CMakeLists.txt中加入如下代码:
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_SOURCE_DIR}/custom_output.sh")
全局 RULE_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
}
]
如果您使用 Cortex Debug 进行调试,您应该将以下代码添加到您的 launch.json
"postLaunchCommands": ["set substitute-path /mnt/d d:/"]
推荐阅读
- ios - Firebase - 自定义事件 - 仅提供过去 30 分钟的事件数据
- c# - 物理键盘事件挂钩不适用于 Xamarin iOS 表单中的 Master-Detail 应用程序
- sql - Microsoft SQL Server 卡在“Install_SQLSupport_CPU64_Action”
- android - Android Picasso 无法获取图像但占位符
- regex - 正则表达式将多个字母作为一个匹配项,导致我的代码出现问题
- ubuntu - PyOpenCL 找不到设备
- regex - How to split string with words, numbers and semicolons to map?
- javascript - 使用 Gatsby 部署到 github 页面时的内容安全策略
- python - 使用 Lambda 创建自定义 Keras 层对象
- c++ - CMake:提取 tar 会出现错误但没有消息