Если какое-то логическое условие истинно (например, ENABLE_TESTING), тогда я хочу запустить что-то вроде:
COMMAND ./b2 --with-filesystem --with-program_options --with-test
А если логическое условие ложно, тогда я вместо этого хочу:
COMMAND ""
Кажется, что я могу добиться этого с помощью этого очень уродливого кода:
COMMAND $<$<BOOL:${ENABLE_TESTING}>:./b2> $<$<BOOL:${ENABLE_TESTING}>:--with-filesystem> $<$<BOOL:${ENABLE_TESTING}>:--with-program_options> $<$<BOOL:${ENABLE_TESTING}>:--with-test>
Но, как вы можете видеть, я должен повторять логический тест снова и снова.Если я наивно пытаюсь объединить их в одно выражение:
COMMAND $<$<BOOL:${ENABLE_TESTING}>:./b2 --with-filesystem --with-program_options --with-test>
Тогда я получаю ошибку /bin/sh: 1: $<1:./b2: not found
.Пространства, по-видимому, анализируются до вычисления выражения генератора.Я цитирую все это:
COMMAND "$<$<BOOL:${ENABLE_TESTING}>:./b2 --with-filesystem --with-program_options --with-test>"
Но это приводит к ошибке /bin/sh 1: /b2 --with-filesystem --with-program_options --with-test: not found
.Я полагаю, что все это рассматривается как имя команды, а не команды с параметрами.Как я могу написать это так, чтобы оно было чистым и работало?
РЕДАКТИРОВАТЬ: я попытался упростить код для минимального примера, но я оставил дополнительные сложности.Эта команда выполняется в секции ExternalProject_Add
, и мне нужно полагаться на специальные токены, такие как <BINARY_DIR>
.
COMMAND ./b2 "--stagedir=<BINARY_DIR>" --with-filesystem --with-program_options --with-test
. Я не могу переместить команды в оператор if в другом месте, потому что если ясделайте так, чтобы токены каталога не расширялись.