Как я могу распространить CXX_STANDARD и связанные свойства на зависимые цели?
Когда вы устанавливаете свойство цели CMake, вы можете сделать его
PUBLIC
,
INTERFACE
или же
PUBLIC
. Тем не менее - страница руководства CMake на
CXX_STANDARD
свойство не указывает на возможность указать одно из них. В частности, предположим, что у меня есть:
set_target_properties(mylib PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
Он действительно недоступен? И если да, то почему?
(Примечание: этот вопрос относится точно так же к C или любому языку, который CMake поддерживает таким образом.)
1 ответ
Как отмечает @Mizux в комментарии, кажется, что на данный момент вы не можете сделать эти
CXX_
параметры с префиксом распространяются на зависимые цели: свойства распространения именуются
INTERFACE_
+ исходное имя свойства - и нет свойств с префиксом
INTERFACE_CXX_
в основном списке целевых объектов недвижимости по состоянию на октябрь 2020 г.
Я не знаю, почему это так.
Однако - можно получить эффект
INTERFACE
или же
PUBLIC
на эти свойства, в некоторой степени, используя target_compile_features()
команда (или это макрос? Я всегда их путаю) с одной из функций:
cxx_std_98
,
cxx_std_11
и т.д. Таким образом, например:
target_compile_features(mylib PUBLIC cxx_std_11)
но это все еще не совсем то
PUBLIC
эквивалент команды OP в вопросе: Это не препятствует доступности расширений GNU. Итак, это полурешение - и оно мне все равно не нравится, потому что синтаксис в вопросе лучше.