target_compile_options () только для файлов C ++?

Можно ли использоватьtarget_compile_options() только для файлов C ++? Я хотел бы использовать его для цели, которая используется в качестве зависимости для других приложений, чтобы библиотека могла распространять свои флаги компилятора в эти приложения. Тем не менее, есть определенные флаги, такие как-std=c++14, что приводит к сбою сборки, если они используются с файлами C или ObjC.

Я прочитал, что я долженCXX_FLAGS вместо этого, чтобы только добавить эти флаги в файлы C ++, однако это не будет (автоматически) распространяться через систему пакетов cmake.

 usr123456726 июл. 2016 г., 08:39
Что вы подразумеваете подСистема пакетов CMake?
 πάντα ῥεῖ26 июл. 2016 г., 01:21
IIRCCXX_FLAGS может распространяться через библиотечные пакетыпрефикс с этим именем пакета.

Ответы на вопрос(1)

Решение Вопроса

Решение

Вы можете сделать это сгенератор выражений:

target_compile_options(MyLib PUBLIC 
target_compile_options(MyLib PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=c++14>)
lt;
target_compile_options(MyLib PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-std=c++14>)
lt;COMPILE_LANGUAGE:CXX>:-std=c++14>)

альтернатива

Но более независимый от платформы способ сделать это в этом конкретном случае будет использоватьtarget_compile_features(), Я не уверен чтофункция компилятора вы используете, поэтому ниже приведен только пример:

target_compile_features(MyLib PUBLIC cxx_explicit_conversions)
 Dmitry Mikushin08 мар. 2019 г., 12:17
На CMake 3.12 у меня это работает только еслиenable_language(CUDA) присутствует в преамбуле.
 mjwach13 апр. 2018 г., 19:57
target_compile_features, очевидно, можно использовать для прямого запроса конкретной языковой версии по годам без необходимости выбирать конкретные функции, представленные этой версией: target_compile_features (someTargetName PUBLIC cxx_std_14)
 rich.e26 июл. 2016 г., 15:25
Отлично, генератор выражений был именно тем, что мне было нужно, спасибо. Target_compile_features действительно кажется хорошим, хотя нам нужно придерживаться cmake v3.0 на данный момент из-за некоторых дистрибутивов.
 RAM23 авг. 2018 г., 12:24
Пожалуйста, не устанавливайте стандарт C ++, манипулируя параметрами компилятора. Начиная с cmake 3.1, cmake позволяет пользователям устанавливать требуемый стандарт компилятора через целевые свойства, устанавливаяCXX_STANDARD собственность до 11.

Ваш ответ на вопрос