CMake: Как правильно установить разные команды отладки для разных конфигураций сборки? - PullRequest
0 голосов
/ 28 января 2020

Я пытался использовать свойство VS_DEBUGGER_COMMAND с выражениями генератора.

В соответствии с руководством по CMake оно должно работать: https://cmake.org/cmake/help/v3.16/prop_tgt/VS_DEBUGGER_COMMAND.html

Мой сценарий CMake - это следующее:

set_property(TARGET ${MAYA_PLUGIN_NAME} PROPERTY VS_DEBUGGER_COMMAND
    $<$<CONFIG:Debug2017>:"C:/Program Files/Autodesk/Maya2017/bin/maya.exe">
    $<$<CONFIG:Release2017>:"C:/Program Files/Autodesk/Maya2017/bin/maya.exe">
    $<$<CONFIG:Debug2018>:"C:/Program Files/Autodesk/Maya2018/bin/maya.exe">
    $<$<CONFIG:Release2018>:"C:/Program Files/Autodesk/Maya2018/bin/maya.exe">
    $<$<CONFIG:Debug2019>:"C:/Program Files/Autodesk/Maya2019/bin/maya.exe">
    $<$<CONFIG:Release2019>:"C:/Program Files/Autodesk/Maya2019/bin/maya.exe">
)

Что я получил для конфигурации Debug2018 для команды отладчика:

Command                 ;;"C:/Program Files/Autodesk/Maya2018/bin/maya.exe";;;

, что, конечно, не правильно.

Вопрос: Что я делаю не так?

1 Ответ

0 голосов
/ 28 января 2020

Выражения генератора, помещенные в несколько строк, интерпретируются CMake иначе , чем помещая их все в одну строку (связанный вопрос здесь ). В этом случае для set_property() CMake интерпретирует выражение многострочного генератора как список . Следовательно, для конфигурации Debug2018 одна запись списка оценивается как путь maya.exe, а другие - как пустые строки. Все они помещены в список через точку с запятой.

Чтобы CMake не мог интерпретировать выражение как список, поместите выражение генератора whole в одну строку:

set_property(TARGET ${MAYA_PLUGIN_NAME} PROPERTY VS_DEBUGGER_COMMAND
    $<$<CONFIG:Debug2017>:"C:/Program Files/Autodesk/Maya2017/bin/maya.exe">$<$<CONFIG:Release2017>:"C:/Program Files/Autodesk/Maya2017/bin/maya.exe">$<$<CONFIG:Debug2018>:"C:/Program Files/Autodesk/Maya2018/bin/maya.exe">$<$<CONFIG:Release2018>:"C:/Program Files/Autodesk/Maya2018/bin/maya.exe">$<$<CONFIG:Debug2019>:"C:/Program Files/Autodesk/Maya2019/bin/maya.exe">$<$<CONFIG:Release2019>:"C:/Program Files/Autodesk/Maya2019/bin/maya.exe">
)

Вы также можете использовать CMake string(CONCAT ...) команда для создания выражения генератора в виде одной строки, а затем передача этой строки в команду set_property():

string(CONCAT MY_CONFIG_GENEX
    "$<$<CONFIG:Debug2017>:\"C:/Program Files/Autodesk/Maya2017/bin/maya.exe\">"
    "$<$<CONFIG:Release2017>:\"C:/Program Files/Autodesk/Maya2017/bin/maya.exe\">"
    "$<$<CONFIG:Debug2018>:\"C:/Program Files/Autodesk/Maya2018/bin/maya.exe\">"
    "$<$<CONFIG:Release2018>:\"C:/Program Files/Autodesk/Maya2018/bin/maya.exe\">"
    "$<$<CONFIG:Debug2019>:\"C:/Program Files/Autodesk/Maya2019/bin/maya.exe\">"
    "$<$<CONFIG:Release2019>:\"C:/Program Files/Autodesk/Maya2019/bin/maya.exe\">"
)
set_property(TARGET ${MAYA_PLUGIN_NAME} PROPERTY VS_DEBUGGER_COMMAND
    ${MY_CONFIG_GENEX}
)

В этом случае вы должны экранировать кавычки вокруг maya.exe путь с обратной косой чертой (например, \"...\").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...