수색…


Make로 빌드 할 때 디버깅하는 일반적인 접근법

make 가 실패했다고 가정하자.

$ make

대신 명령을 실행하려면 make VERBOSE=1 로 실행하십시오. 그런 다음 직접 볼 링커 또는 컴파일러 명령을 실행하십시오. 필요한 플래그 또는 라이브러리를 추가하여 작동 시키십시오.

그런 다음 변경해야 할 것을 파악하십시오. 따라서 CMake 자체는 올바른 인수를 컴파일러 / 링커 명령에 전달할 수 있습니다.

  • 시스템에서 무엇을 바꿀 것인가 (설치할 라이브러리, 버전, CMake 자체 버전)
  • 이전에 실패 할 경우, 설정할 환경 변수 또는 CMake에 전달할 매개 변수
  • 그렇지 않으면 프로젝트의 CMakeLists.txt 또는 FindSomeLib.cmake 와 같은 라이브러리 탐지 스크립트에서 변경해야 할 사항

이를 돕기 위해 CMakeLists.txt 또는 *.cmakemessage(${MY_VARIABLE}) 호출을 CMakeLists.txt 하여 검사 할 변수를 디버깅합니다.

CMake가 자세한 메이크 파일을 만들도록하십시오.

CMake 프로젝트가 project() 를 통해 초기화되면 결과 빌드 스크립트의 출력 상세가 다음을 통해 조정될 수 있습니다.

CMAKE_VERBOSE_MAKEFILE

이 변수는 프로젝트를 구성 할 때 CMake의 명령 행을 통해 설정할 수 있습니다 :

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

GNU make의 경우이 변수는 make VERBOSE=1 과 같은 효과를냅니다.

find_package () 오류 디버그

참고 : 표시된 CMake 오류 메시지에는 이미 "비표준"라이브러리 / 도구 설치 경로에 대한 수정 사항이 포함되어 있습니다. 다음 예제는 좀 더 자세한 CMake find_package() 출력을 보여줍니다.

내부적으로 지원되는 CMake 패키지 / 모듈

다음 코드 ( 문제의 모듈로 FindBoost 모듈 바꾸기)

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

다음과 같은 오류를 준다.

CMake Error at [...]/Modules/FindBoost.cmake:1753 (message):
  Unable to find the requested Boost libraries.

  Unable to find the Boost header files.  Please set BOOST_ROOT to the root
  directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  Boost's headers.

그리고 라이브러리를 찾으려는 곳이 궁금 할 때 Boost 모듈이 더 자세한 출력을 얻는 것과 같은 패키지에 _DEBUG 옵션이 있는지 확인할 수 있습니다

$ cmake -D Boost_DEBUG=ON .. 

CMake 사용 가능 패키지 / 라이브러리

다음 코드 ( Xyz 를 해당 라이브러리로 대체)

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

다음과 같은 오류를 준다.

CMake Error at CMakeLists.txt:4 (find_package):
  By not providing "FindXyz.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Xyz", but
  CMake did not find one.

  Could not find a package configuration file provided by "Xyz" with any of
  the following names:

    XyzConfig.cmake
    xyz-config.cmake

  Add the installation prefix of "Xyz" to CMAKE_PREFIX_PATH or set "Xyz_DIR"
  to a directory containing one of the above files.  If "Xyz" provides a
  separate development package or SDK, be sure it has been installed.

그리고 라이브러리를 찾으려는 곳이 궁금 할 때, 문서화되지 않은 CMAKE_FIND_DEBUG_MODE 글로벌 변수를 사용하여 더 자세한 출력을 얻을 수 있습니다.

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow