programing

실행하기 전에 CMake 인쇄 명령 만들기

nasanasas 2020. 12. 5. 09:53
반응형

실행하기 전에 CMake 인쇄 명령 만들기


Linux에서 CMake로 빌드 된 대규모 C ++ 프로젝트에서 작업 중입니다. CMake는 정상적으로 실행되어 모듈 및 애플리케이션 트리에 수많은 Makefile을 생성합니다. GNU를 실행 make하면 링커 오류가 발생합니다. make명령을 실행하기 전에 정확한 명령을 인쇄하려면 어떻게 해야합니까?

-d 옵션은 명령을 인쇄하지 않지만 도움이되지 않은 많은 정보를 인쇄합니다.

-n 옵션은 모든 명령을 인쇄하지만 실행하지는 않으므로 문제가 정확히 무엇인지 알 수 없습니다. make -n의 stdout을 살펴보면 관련된 명령이 보이지 않습니다. 이전 명령의 결과에 따라 일부 명령이 변경되는 것으로 생각되며 Makefile의 계층 구조로 인해 실제 상황을 파악하기가 어렵습니다.

make의 man 페이지에 도움이되는 다른 옵션이 보이지 않습니다 .


이것이 효과가있을 것이라고 확신합니다.

make VERBOSE=1

또한 이것을 CMakeLists.txt에 추가하여 영구적으로 설정할 수 있습니다.

set(CMAKE_VERBOSE_MAKEFILE on)

이것은 CMake FAQ 에서 다룹니다 .


자동 생성 된 Makefile의 경우 다음을 시도하십시오.

make V=1

GNU make에 적용되고 CMake에 의해 생성되었는지 여부에 관계없이 모든 Makefile과 함께 작동하는 --trace옵션은 make 옵션을 사용하는 것입니다. 그러면 make실행중인 명령 출력 되고 여전히 실행됩니다.

이는 CMake / automake 생성 메이크 파일에서 인쇄를 트리거 VERBOSE=1하거나 V=1트리거하는 명령뿐만 아니라 모든 명령에 적용됩니다 .

그럼에도 불구하고 리눅스에 대한 또 다른 대안은 아래에 메이크업을 실행하는 것입니다 strace를 같이 strace -f -e trace=execve make <make options>. strace의 출력에는 실행되는 모든 프로세스 가 포함 됩니다 : make, make 실행 한 쉘 스크립트 등.

예를 들어 CMake에서 생성 한 메이크 파일이 실행 /usr/bin/cmake -E __run_co_compile <lots of options ...>되는 것을 발견하고 이것이 차례로 실행될 정확한 컴파일러 호출이 무엇인지 여전히 궁금 할 수 있습니다. strace 메소드로 얻을 수 있습니다.


그 사용하기 위해 cmake --build어떤 호출합니다 make내부적으로, 하나를 사용 :

  $ cmake --build <dir> -- VERBOSE=1

--이전에 유의하십시오 VERBOSE=1! 이는 기본 make프로세스에 인수를 전달합니다 .

또는:

  $ VERBOSE=1 cmake --build <dir>

이번에는 환경 변수를 통해에 전달 VERBOSE=1됩니다 make.

또는 cmake 버전 3.14 이상을 사용하는 경우 :

  $ cmake --build <dir> --verbose

인수의 순서에 유의하십시오! --verbose옵션은 이후에 와야 --build및 인수.

참고 URL : https://stackoverflow.com/questions/4808303/making-cmake-print-commands-before-executing

반응형