В нашем проекте мы устанавливаем CMAKE_SYSROOT
в зависимости от выбранной конфигурации.Это так, потому что конфигурация выражает (помимо прочего) целевую платформу (кросс-компиляция - но не только, но и небольшие различия в поведении).
Мы хотели бы выразить это с помощью выражения генератора , чтобыдружественный к многоконфигурационным IDE.
Однако мы не нашли способ сделать это.Во-первых, вы заметите, что CMAKE_SYSROOT
даже не упоминает такую возможность.Мы все еще пытались установить что-то вроде этого (не точное значение - просто образец!):
set(CMAKE_SYSROOT $<IF:$<CONFIG:hw1>,path1,path2>)
, надеясь, что значение используется в контексте, где выражения генератора поддерживаются,Но, видимо, это не так.Вместо этого представляется, что дословное значение предоставляется в аргументе --sysroot
(--sysroot="\$<IF:\$<CONFIG:hw1>,path1,path2>"
).Добавление кавычек вокруг значения ничего не меняет.
Какие еще есть варианты?
Позвольте мне также добавить примечание к CMAKE_TOOLCHAIN_FILE
который упоминается в документации CMAKE_SYSROOT
.
Я не вижу, чтобы CMAKE_TOOLCHAIN_FILE
был установлен на что-либо после grep
-произведения файловсгенерировано cmake -DCMAKE_BUILD_TYPE=hw1 ../
и нашими собственными источниками.
Очевидно, файл, в котором мы установили CMAKE_SYSROOT
, не указан CMAKE_TOOLCHAIN_FILE
.Тем не менее, аргумент --sysroot
устанавливается в ожидаемое значение.(Только не с помощью выражения генератора !) Итак, он работает как-то .
Я ожидаю, что у нас возникнет та же проблема и с другими переменными:
последние два в любом случае зависят от CMAKE_SYSROOT
(в нашем случае).