прицепить пост билд эвент, кросс платформенно, немного разные эвенты под разные типы сборок:
if (CMAKE_CONFIGURATION_TYPES)
set(conf_types ${CMAKE_CONFIGURATION_TYPES})
else()
set(conf_types ${CMAKE_BUILD_TYPE})
endif()
foreach(conf IN LISTS conf_types)
add_custom_command(
TARGET mytarget
POST_BUILD
COMMAND "$<$<CONFIG:${conf}>:echo $<TARGET_FILE:mytarget>>"
COMMENT "My process target \"mytarget\""
VERBATIM
)
endforeach()
Однако в студии получаю такое:
"echo J:\myprj\build-vc15-x64\Release\bin\mytarget.dll"
То есть команда в кавычках, из-за этого команда не выполняется.
Окей, пробую убрать кавычки в самой команде:
COMMAND $<$<CONFIG:${conf}>:echo $<TARGET_FILE:mytarget>>
На выходе получаю вообще тихий ужас:
""$"<1:echo" "J:/myprj/build-vc15-x64/Release/bin/mytarget.dll>"
Пробую убрать VERBATIM, на выходе примерно то же самое, что и выше, но кавычки опять изменились:
""$"<1:echo" J:/myprj/build-vc15-x64/Release/bin/mytarget.dll>
CMake 3.18.2, но целевой - 3.7.2
MS VS 16.4.3
Под линуксами (make в качестве генератора) первый вариант работает изумительно.
Куда копать?
Время обеда, поэтому позвольте я снова подниму этот вопрос.
Нет... Попробую...
Увы, результат такой же...
Как выглядит код сейчас? Кавычки в COMMAND оставлены?
Всё перепробовал. Везде добавлял, везде убирал, где-то оставлял, где-то убирал. Пробовал вообще весь текст команды, включая определение CONFIG в отдельную переменную вытаскивать, так же плясать с кавычками - всё без толку...
Просто echo $<TARGET_FILE:mytarget> работает?
Да, так всё отлично. При отсутствии кавычек.
Обсуждают сегодня