ARM 기반 노트북용 Paraview 그래픽 시각화 소프트웨어를 컴파일하려고 하는데 cmake "정책"과 관련된 것으로 보이는 일부 구성 경고가 표시됩니다. 경고 텍스트와 cmake 매뉴얼 페이지에는 특정 정책을 설정하기 위해 명령을 실행할 수 있어야 한다고 나와 cmake_policy()
있지만 이를 실행하는 방법과 위치를 모르겠습니다.
특정 cmake 정책을 설정하는 방법은 무엇입니까?
답변1
CMake 명령은 cmake_policy()
다음에 문서화되어 있습니다.CMake 문서.
CMakeLists.txt
CMake 자체의 동작을 변경하기 위해 프로젝트 파일 에 추가되는 경우가 많으며 일반적으로 CMakeLists.txt
최신 버전의 CMake에서 이전 기능을 처리할 수 있습니다.
이를 사용하여 개별 정책을 설정할 수 있습니다.
cmake_policy(SET CMP<NNNN> OLD)
은 <NNNN>
CMake 정책 번호입니다. 여기서는 OLD
이 정책에 적용하려는 "이전 동작"(해당 단어 OLD
가 될 수도 있음 )을 나타냅니다 NEW
.
또는 이 명령을 사용하여 특정 버전의 CMake와 호환되는 정책을 설정할 수 있습니다.
cmake_policy(VERSION x.xx)
최소한 .x.xx
2.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