如何让Cmake输出相对路径?
how to make Cmake output relative path?
在我最后删除的关于CMake的问题中,我提出了一个关于如何使CMake输出相对路径的问题,因为只有vscode的问题面板
了解 Windows 工作区下的目录或相对路径。
除非某些特定情况,否则不会发生这种情况。如果你在Windows中使用vsocde编辑源文件并使用WSL作为终端使用CMake编译,你会发现vscode无法完美运行。
- 问题面板会在编译完成后告诉你找不到错误或警告的源代码。
- gdb 调试时找不到源文件。
(1)解决第一个problem:Add你最外层的代码如下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 消息并将其转换为相对 path.Where “/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:/"]
在我最后删除的关于CMake的问题中,我提出了一个关于如何使CMake输出相对路径的问题,因为只有vscode的问题面板 了解 Windows 工作区下的目录或相对路径。
除非某些特定情况,否则不会发生这种情况。如果你在Windows中使用vsocde编辑源文件并使用WSL作为终端使用CMake编译,你会发现vscode无法完美运行。
- 问题面板会在编译完成后告诉你找不到错误或警告的源代码。
- gdb 调试时找不到源文件。
(1)解决第一个problem:Add你最外层的代码如下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 消息并将其转换为相对 path.Where “/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:/"]