cmake 정책을 설정하는 방법은 무엇입니까?

cmake 정책을 설정하는 방법은 무엇입니까?

ARM 기반 노트북용 Paraview 그래픽 시각화 소프트웨어를 컴파일하려고 하는데 cmake "정책"과 관련된 것으로 보이는 일부 구성 경고가 표시됩니다. 경고 텍스트와 cmake 매뉴얼 페이지에는 특정 정책을 설정하기 위해 명령을 실행할 수 있어야 한다고 나와 cmake_policy()있지만 이를 실행하는 방법과 위치를 모르겠습니다.

특정 cmake 정책을 설정하는 방법은 무엇입니까?

답변1

CMake 명령은 cmake_policy()다음에 문서화되어 있습니다.CMake 문서.

CMakeLists.txtCMake 자체의 동작을 변경하기 위해 프로젝트 파일 에 추가되는 경우가 많으며 일반적으로 CMakeLists.txt최신 버전의 CMake에서 이전 기능을 처리할 수 있습니다.

이를 사용하여 개별 정책을 설정할 수 있습니다.

cmake_policy(SET CMP<NNNN> OLD)

<NNNN>CMake 정책 번호입니다. 여기서는 OLD이 정책에 적용하려는 "이전 동작"(해당 단어 OLD가 될 수도 있음 )을 나타냅니다 NEW.

또는 이 명령을 사용하여 특정 버전의 CMake와 호환되는 정책을 설정할 수 있습니다.

cmake_policy(VERSION x.xx)

최소한 .x.xx2.4

두 경우 모두 CMakeLists.txt프로젝트 파일이 수정되므로 cmake다시 실행해야 합니다.

문서도 참조하세요cmake_minimum_required().

답변2

저는 Cmake 버전 3.22.0을 사용하고 있는데 @kusalananda의 답변으로 문제가 해결되지 않았습니다. 상단에 다음 줄을 추가했는데 CMakeLists.txt문제가 해결되었습니다.

set(CMAKE_POLICY_DEFAULT_CMP<NNNN> NEW)

물론, NNNN이는 명령줄에 제공된 숫자로 대체되어야 합니다.

답변3

최종 CMake 정책 경고는 사용자에게 이러한 메시지에 신경 쓰지 말아야 함을 명확하게 알려줍니다. 이 메시지는 프로젝트 개발자를 위한 것입니다.

CMake Warning (dev) at c/tools/CMakeLists.txt:22 (add_executable):
  Policy CMP0069 is not set: INTERPROCEDURAL_OPTIMIZATION is enforced when
  enabled.  Run "cmake --help-policy CMP0069" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  INTERPROCEDURAL_OPTIMIZATION property will be ignored for target
  'msgr-recv'.
This warning is for project developers.  Use -Wno-dev to suppress it.

억제하는 데 사용되었습니다 -Wno-dev.

그러나 때때로 소프트웨어 사용자로서 프로젝트를 설치할 때 정책을 설정해야 할 이유가 있습니다. 한 가지 이유는 링크 시간 최적화(프로시저 간 최적화라고도 함)를 활성화하는 것일 수 있습니다. 정책이 설정되지 않으면 CMake는 이를 무시합니다 -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON.

이 경우 다음을 사용할 수 있습니다.-DCMAKE_POLICY_DEFAULT_CMP<NNNN>CMakeLists.txt를 편집하지 않고도 필요한 동작을 얻을 수 있습니다. 물론 개발자에게 연락하여 소스 코드의 정책을 다루도록 제안하는 것도 좋은 생각입니다.

-DCMAKE_POLICY_DEFAULT_CMP0069=NEW -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON

관련 정보