Как я могу распространить 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. Итак, это полурешение - и оно мне все равно не нравится, потому что синтаксис в вопросе лучше.

Другие вопросы по тегам