2016-07-25 2 views
6

Ist es möglich, target_compile_options() nur für C++ - Dateien zu verwenden? Ich möchte es für ein Ziel verwenden, das als eine Abhängigkeit für andere Anwendungen verwendet wird, damit die Bibliothek ihre Compiler-Flags an diese Apps weitergeben kann. Es gibt jedoch bestimmte Flags, z. B. -std=c++14, die das Build fehlschlagen, wenn sie mit C oder ObjC-Dateien verwendet werden.target_compile_options() nur für C++ - Dateien?

Ich habe gelesen, dass ich stattdessen nur diese Flags zu C++ - Dateien hinzufügen sollte, jedoch wird dies nicht automatisch durch cmake Pakete System propagieren.

+0

IIRC 'CXX_FLAGS' kann durch Bibliothekspakete verbreitet werden [mit, dass prefixing Pakete name] (https: // Cmake .org/cmake/help/v3.0/manual/cmake-packages.7.html). –

+0

Was meinst du mit * CMake's Paketsystem *? – usr1234567

Antwort

7

Lösung

Sie können mit generator expressions dies tun:

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

Alternative

Aber je mehr plattformunabhängig, wie es in diesem speziellen Fall zu tun wäre target_compile_features() zu verwenden . Ich bin mir nicht sicher, welche compiler feature Sie verwenden, so dass die folgende ist nur ein Beispiel:

target_compile_features(MyLib PUBLIC cxx_explicit_conversions) 
+0

Großartig, Generator Ausdrücke war genau das, was ich brauchte, danke. Die target_compile_features scheint wirklich nett zu sein, obwohl wir wegen einiger Distributionen vorerst bei cmake v3.0 bleiben müssen. –

Verwandte Themen