2016-07-25 11 views
6

Czy można używać tylko target_compile_options() tylko dla plików C++? Chciałbym użyć go dla celu, który jest używany jako zależność dla innych aplikacji, dzięki czemu biblioteka może propagować swoje flagi kompilatora do tych aplikacji. Istnieją jednak pewne flagi, takie jak -std=c++14, które powodują niepowodzenie kompilacji, jeśli są używane z plikami C lub ObjC.target_compile_options() tylko dla plików C++?

Przeczytałem, że powinienem CXX_FLAGS zamiast tego tylko dodawać te flagi do plików C++, jednak to nie będzie (automatycznie) propagować poprzez system pakietów cmake.

+0

IIRC 'CXX_FLAGS' można rozmnażać przez pakietach bibliotecznych przez [poprzedzając że pakiety z nazwa] (https: // CUpewnij .org/cmake/help/v3.0/manual/cmake-packages.7.html). –

+0

Co masz na myśli przez * system paczek CMAK *? – usr1234567

Odpowiedz

7

Rozwiązanie

Można to zrobić z generator expressions:

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

alternatywna

Ale im bardziej niezależny od platformy sposób to zrobić w tym konkretnym przypadku byłoby użyć target_compile_features() . Nie jestem pewien, które compiler feature używasz, więc po to tylko przykład:

target_compile_features(MyLib PUBLIC cxx_explicit_conversions) 
+0

Świetnie, wyrażeń generatora było dokładnie to, czego potrzebowałem, dzięki. Parametry target_compile_features rzeczywiście wydają się fajne, chociaż musimy trzymać się z cmake v3.0 na razie ze względu na niektóre dystrybucje. –