как заставить Cmake выводить относительный путь? - PullRequest
0 голосов
/ 16 марта 2020

В моем последнем удаленном вопросе о CMake я поднял вопрос о том, как сделать вывод CMake относительным путем, потому что проблемная панель vscode понимает только каталоги Windows или относительные пути в рабочей области.

Этого не произойдет если какая-то конкретная c ситуация. Если вы используете vsocde для редактирования исходных файлов в Windows и используете WSL в качестве терминала для компиляции с использованием CMake, вы обнаружите, что vscode не может работать идеально.

  1. панель проблем сообщит вам, что не может найти исходный код ошибки или предупреждения после завершения компиляции.
  2. gdb не удалось найти исходный файл при отладке.

1 Ответ

1 голос
/ 16 марта 2020

(1) Решение первой проблемы: добавьте следующий код в ваш самый внешний CMakeLists.txt:

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_SOURCE_DIR}/custom_output.sh")

Глобальное свойство RULE_LAUNCH_COMPILE установлено в пользовательский скрипт запуска с именем custom_output. sh, который необходимо добавить к root дерева исходных текстов 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>logfile
    #while read line; do
    #echo ${line#/mnt/d/demo/}
    #done <logfile
    #"$@" 2> >(sed 's@^/mnt/d/demo/@@')
    { "$@" 2> >(sed 's@^/mnt/d/demo/@@' >&3); } 3>&2

будет выводить сообщения stderr также на stderr и преобразовывать его в относительный путь. Где "/ mnt / d / demo /" есть строка для удаления. Что удалять, зависит от относительного пути исходного кода.

(2) Вы можете использовать следующую команду из gdb для переназначения для решения второй проблемы:

set substitute-path old_path new_path

Вам необходимо добавить следующий код к вам запустить. json

 "customLaunchSetupCommands": [
                            {
                                "text": "set substitute-path /mnt/d d:/",
                                "description": "change directory to workspace",
                                "ignoreFailures": false
                            }
        ]

Если вы отлаживаете с помощью Cortex Debug, вы должны добавить следующий код для запуска. json

"postLaunchCommands": ["set substitute-path /mnt/d d:/"]
...