Выражения генератора CMake, вычисляющие пустые строки - PullRequest
0 голосов
/ 06 декабря 2018

Я строю простой проект 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...