Я столкнулся с чем-то похожим, желая скопировать DLL-файл в целевой каталог, но только для релизов. После много порванных волос мне удалось заставить его работать, используя несколько выражений генератора ($<...>
штук). Я помещаю это здесь через семь лет не так много, чтобы решить вашу проблему (хотя я бы восхищался вашим уровнем уместности), но для того, чтобы спасти черепные волосы следующего человека, имеющего эту же проблему, и найти этот вопрос в google:
set(no_copy $<NOT:$<CONFIG:Release>>)
add_custom_command(TARGET myDLL POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E
# do nothing for non-Release build
$<${no_copy}:echo> $<${no_copy}:"copy omitted for non-release build, command would have been ">
# copy file for release build
copy_if_different $<TARGET_FILE:myDLL> ${DIR_FOR_DLL})
хитрость заключается в том, чтобы написать echo
перед командой, которая в противном случае будет выдано. Можно заключить остальную часть командной строки в ряд выражений генератора, чтобы сократить выход за счет полностью нечитаемого файла cmake. С другой стороны, похоже, нет способа подавить копию портативно, не генерируя никакого выхода. Наконец, если вы считаете, что вам легко, и вы можете просто написать , я советую вам избавить себя от разочарования.
Я использую VS2008 и CMake 2.8, и это не работает. – Robert
-1: CMAKE_BUILD_TYPE определяется только во время выполнения. Этот ответ неверен. – Gili
@ Gili: для генераторов с одной конфигурацией (генератор Makefile) он доступен в момент генерации. – richq