CMake에서 일반 컴파일 플래그를 설정하는 최신 방법은 무엇입니까?
컴파일러에 플래그를 가져 오기 위해 CMake에서 제공하는 여러 메커니즘이 있습니다.
현대 사용에서 다른 방법보다 선호되는 방법이 있습니까? 그렇다면 왜? 또한이 방법을 MSVC와 같은 여러 구성 시스템에서 어떻게 사용할 수 있습니까?
최신 CMake (버전 2.8.12 이상)의 경우 target_compile_options
내부적으로 대상 속성을 사용 하는를 사용해야합니다 .
CMAKE_<LANG>_FLAGS
전역 변수이며 오류가 가장 많이 발생합니다. 또한 매우 편리 할 수있는 생성기 표현식을 지원하지 않습니다 .
add_compile_options
디렉터리 속성을 기반으로하므로 상황에 따라 문제가 없지만 일반적으로 옵션을 지정하는 가장 자연스러운 방법은 아닙니다.
target_compile_options
소스 파일에 대한 컴파일 옵션은 파일이 속한 프로젝트에 의해 결정되기 때문에 ( COMPILE_OPTIONS
및 INTERFACE_COMPILE_OPTIONS
대상 속성 설정을 통해) 대상별로 작동 하며 일반적으로 가장 깨끗한 CMake 코드를 생성합니다. 하드 디스크에 있음). 이는 요청시 종속 대상에 대한 옵션 전달을 자동으로 처리 한다는 추가적인 이점이 있습니다 .
조금 더 장황하지만 대상별 명령을 사용하면 다양한 빌드 옵션을 합리적으로 세밀하게 제어 할 수 있으며 장기적으로 두통을 유발할 가능성이 가장 적습니다.
이론적으로는을 사용하여 직접 각 속성을 설정할 수도 set_target_properties
있지만 target_compile_options
일반적으로 더 읽기 쉽습니다.
예를 들어 foo
생성기 표현식을 사용하여 구성을 기반으로 대상의 컴파일 옵션을 설정하려면 다음과 같이 작성할 수 있습니다.
target_compile_options(foo PUBLIC "$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>")
target_compile_options(foo PUBLIC "$<$<CONFIG:RELEASE>:${MY_RELEASE_OPTIONS}>")
'Programing' 카테고리의 다른 글
터미널에서 경고음을 비활성화하고 싶습니다-Mac OSX (0) | 2020.10.20 |
---|---|
API와 관련된 콜백 URL은 무엇입니까? (0) | 2020.10.20 |
파이썬에서 PHP의 print_r ()에 해당하는 것은 무엇입니까? (0) | 2020.10.20 |
남은 높이를 100 % 채우는 방법은 무엇입니까? (0) | 2020.10.20 |
같은 클래스에있는 다른 개체의 개인 필드에 액세스 (0) | 2020.10.20 |