2016-07-25 2 views
6

C++ 파일에만 target_compile_options()을 사용할 수 있습니까? 나는 다른 응용 프로그램에 대한 종속성으로 사용되는 대상을 위해이 응용 프로그램에 컴파일러 플래그를 전달할 수 있도록이 응용 프로그램을 사용하고 싶습니다. 그러나 -std=c++14과 같은 특정 플래그가 C 또는 ObjC 파일과 함께 사용되는 경우 빌드가 실패하게합니다.C++ 파일에 대해서만 target_compile_options()?

나는 CXX_FLAGS을 C++ 파일에만 추가해야한다고 읽었으나 cmake의 패키지 시스템을 통해 (자동으로) 전파되지는 않습니다.

+0

IIRC'CXX_FLAGS'에 의해 라이브러리 패키지를 통해 전파 될 수 [그와 접두어로 패키지 이름] (https : //로 cmake .org/cmake/help/v3.0/manual/cmake-packages.7.html). –

+0

* CMake의 패키지 시스템은 * 무엇을 의미합니까? – usr1234567

답변

7

솔루션

당신은 generator expressions하여이 작업을 수행 할 수 있습니다 target_compile_features()를 사용하는

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

대체

그러나이 특별한 경우에 그 일의 더 많은 플랫폼에 독립적 인 방법이 될 것이다 . 다음은 예입니다 그래서, 당신이 사용중인 compiler feature 확실하지 않다 :

target_compile_features(MyLib PUBLIC cxx_explicit_conversions) 
+0

제너레이터 표현식이 정확하게 필요했습니다. 감사합니다. target_compile_features는 실제로 멋지게 보이지만 일부 배포판 때문에 cmake v3.0을 사용해야합니다. –

관련 문제