Установка CMAKE_SYSROOT с помощью выражения генератора - PullRequest
0 голосов
/ 27 декабря 2018

В нашем проекте мы устанавливаем 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 (в нашем случае).

1 Ответ

0 голосов
/ 27 декабря 2018

Если вы действительно хотите передать различные флаги --sysroot компоновщику в генераторе с множеством конфигураций, вам просто нужно передать его через target_link_options с помощью выражения генератора.Но тогда вам, возможно, придется обновить rpath элементов самостоятельно, но я не уверен в этом.

Переменные не используются во время сборки и документация для состояния выражений генератора: Generator expressions are allowed in the context of many target properties...

В команде set я не увидел ничего, что препятствовало бы установке CMAKE_SYSROOT вне файла цепочки инструментов.Я предполагаю, что фраза This variable may only be set in a toolchain file должна быть This variable is normally used in a toolchain file.

Похоже, вы пытаетесь использовать тип сборки в качестве переключателя между двумя различными цепями инструментов.Если это так, то я не понимаю, как это могло бы работать правильно с мультиконфигурационным генератором.Большая часть всего, что вы хотите установить, определяется и используется во время конфигурации, а не во время сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...