Я строю простой проект VS2017 C ++ с помощью CMake 3.13.1
Рассмотрим тип списка CMake, который я заполняю с помощью выражений генератора, специфичных для конфигурации:
foreach(config ${configuration_types})
assign_config_host_flags(host_flags ${config})
foreach(f ${host_flags})
list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
endforeach()
endforeach()
Где${configuration_types}
содержит две конфигурации: «Debug» и «Release»;
и assign_config_host_flags(...)
- это макрос (на самом деле здесь псевдокод), который заполняет ${host_flags}
флагами, специфичными для конфигурации.Например, ${host_flags}
содержит записи, такие как /MDd
для «Debug» или /MD
для «Release».Давайте предположим, что каждая конфигурация ${host_flags}
содержит только 1 конкретную запись (/MDd
или /Md
).
Теперь я создаю пользовательский шаг сборки, который просто печатает вывод ${flags}
(например,это могут быть параметры компилятора):
add_custom_command(
...
COMMAND echo ${flags}
...
)
Идея заключалась в том, чтобы вышеупомянутая команда печатала только те записи, которые соответствуют конфигурации сборки, например, Debug или Release.
Что происходит, когда я собираю конфигурацию отладки, так это то, что при вызове вышеуказанной команды создается следующий вывод:
-Xcompiler /MDd "" ""
Две двойные кавычки происходят из-за того, что у меня есть двеКонфигурации сборки: отладка и выпуск.Это означает, что два выражения генератора $<$<CONFIG:${config}>:-Xcompiler>
и $<$<CONFIG:${config}>:${f}>
были оценены как пустые строки, потому что в настоящее время сборка CONFIG
была "Debug", тогда как current (пройденный в цикле) ${config}
оказался "Release".
Вопрос: Есть ли способ избавиться от этих двух двойных кавычек и оставить только те параметры, которые относятся к текущей конфигурации сборки?Эти пустые строки в двойных кавычках могут быть особенно неприятными, если я скажу, например, создать собственный шаг сборки (еще один add_custom_command
), который передает ${flags}
компилятору.
В заключение, когда я вызываювышеупомянутой пользовательской команды при создании конфигурации отладки, я хочу наблюдать следующий вывод:
-Xcompiler /MDd
В то время как при сборке конфигурации выпуска:
-Xcompiler /MD