2011-08-20 2 views

답변

72

는 자동화 된 없다 방법 (계속) 임의의 빌드 시스템을 autotools에서 cmake로 변환하는 도구. 적당히 큰 프로젝트를 수동으로 변환했습니다. autotools에서 cmake 로의 변환을 쉽게하기 위해 configure.ac 및/또는 Makefile.am 파일 각각에 대해 CMakeLists.txt 파일을 하나 만들고 싶습니다.

슬프게도이 수동 접근법은 두 시스템에서 전문 지식을 개발해야하며 그 중 아무 것도 무고한 사람에게 피해를주지 않아야합니다.

  1. autotools 빌드가 실제로 컴퓨터에서 수행하는 기록을 캡처합니다. 이렇게하면 CMake 빌드 시스템이 동일한 컴파일 플래그를 사용하여 모든 파일을 실제로 컴파일하는지 확인하고 autotools가 수행하는 모든 라이브러리와 실행 파일을 생성 할 수 있습니다. 귀하의 선택에 따라 적어도 귀하의 컴퓨터에서.

    퍼센트의 ./configure를 [옵션 구성] configure_autotools.log

    % 메이크업> make_autotools.log

    % 만들> 모든 디렉토리에서> make_install_autotools.log

  2. 를 설치하는 프로젝트 루트 디렉터리를 포함하여 configure.ac 또는 Makefile.am 파일이 있으면 새 CMakeLists.txt 파일을 만듭니다. cmake add_subdirectory (...) 명령을 리프가 아닌 각 CMakeLists.txt 파일에 추가하여 모든 cmake 파일을 트리 구조로 연결하십시오. cmake project() 및 cmake_minimum_required() 명령을 최상위 CMakeLists.txt 파일 맨 위에 추가하십시오.

    project(MyProject) 
    cmake_minimum_required(VERSION 2.8) 
    add_subdirectory(foo) 
    
  3. 은 이제 아무것도하지 않는 일관된하지만 쓸모 cmake 빌드 시스템을 가지고있다. 잠시 더 깊은 CMakeLists.txt 파일에 몇 가지 message(...) 명령을 추가하여 모든 것이 올바르게 연결되어 있는지 확인하십시오. cmake 구성 문제를 디버깅 할 때는 message()이 귀하의 친구임을 기억하십시오. 빌드를 시도하여 cmake 인프라가 작동하는지 확인하십시오. 아무것도 구축되거나 설치되지 않습니다. 그러나이 시점에서 cmake 인프라를 사용하는 것이 중요합니다.

    퍼센트에서 mkdir build_cmake

    % CD를 build_cmake

    퍼센트의 ccmake의 -i [프로젝트 루트]

    퍼센트이 VERBOSE = 1

    을 [생성, 구성, 구성]

    % make install

  4. 이것은 어려운 부분입니다. 하나씩 CMakeLists.txt 파일을 채 웁니다. 다음 가이드 라인 대응 Makefile.am/configure.ac 파일로

    • 열기 개의 나란히 편집자의 CMakeLists.txt 파일 하나, 다른.

    • 브라우저에 cmake commands documentation을 열어주십시오.

    • 맨 처음부터 시작하는 대신, 작은 라이브러리 또는 실행 파일을 빌드하기위한 cmake 규칙을 만듭니다 (cmake add_library() 또는 add_executable()). 이 방법을 사용하면 한 번에 한 조각 씩 변환을 구축 할 수 있습니다.

    • 각 대상을 추가 할 때마다 cmake 빌드 시스템을 주기적으로 테스트하십시오.

    • 저는 cmake file(GLOB ...) 명령을 사용하여 소스 파일 목록을 압축해서 만듭니다. 이것이 논쟁의 여지가있는 의견임을 유의하십시오.

    • 많은 일반적인 autotools 스 D 자에는 CMake commands이 있습니다. 예를 들어 autoconf AC_TRY_COMPILE은 cmake TRY_COMPILE으로 변환 될 수 있습니다. 하지만 대부분은 모든 작은 autotools 절이하는 일을 이해하고 해당하는 cmake를 작성하는 방법을 알아 내야합니다. 또한 autohool과 유사한 config.h 파일을 만드는 데 도움이되는 series of CMake modules도 있습니다. Makefile.am 파일은 변환하기가 더 쉽고 실제로 cmake로 변환 한 후에 실제로 더 압축 될 수 있습니다.

    • cmake 빌드 결과를 1 단계에서 캡처 한 autotools 로그와 비교하십시오. 컴파일 플래그가 같습니까? 모든 동일한 대상이 구축 되었습니까? 동일한 파일이 설치되어 있습니까?

    • 불행히도 나는 autotools를 최근에 cmake로 변환하지 않았기 때문에 "Makefile.am에 x가 있으면 CMakeLists.txt에 y를 써라"라는 포괄적 인 글을 쓸 수있는 입장이 아닙니다. autotools에서 cmake로 활발하게 전환하는 사람들이 포괄적 인 가이드 라인을 누적 할 수있는 공개 위키의 좋은 위치를 누군가 제안 할 수 있습니까? 나는 여분의 신용, 모든 작업을 그것을 가지고 한 번, 당신의 cmake 규칙을 구축 할 수 있도록 조정할 및 실행에 대한

  5. ...이 유래 대답은 목록에 가장 적합한 장소입니다 있는지 확실하지 않습니다 Windows Visual Studio에서 프로젝트. autotools로 시도해보십시오!

+4

자동 도구가 필요하지 않습니다.이 종류의 정확한 종류의 토론과 일반적인 충고입니다. "configure.ac 및 Makefile.am 파일 각각에 대해 하나의 CmakeLists.txt 파일을 만들고 싶습니다." 당신이 이것에 대해 자세히 설명 할 수 있다면 나는 당신에게 현상금을 수여 할 것입니다. –

+1

@KurtisNusbaum : 단계와 더 많은 지침을 통해 진행 한 프로세스에 대해 자세히 설명하는 답변을 편집했습니다. 이 방법이 더 도움이됩니까? –

+2

이것은 지금까지 본 것 중에 최고입니다. "CMakeLists.txt에 y를 쓰고 Makefile.am에 x가 있으면"보고 싶습니다. 어떤 사람이라도 발견되면 알려주세요. –

10

이 변환은 프로젝트별로 다르므로 일반적으로 적용 할 수있는 자습서를 작성하는 것이 어렵습니다.

다음은 수행 할 작업의 영감을 줄 수있는 몇 가지 도구의 시작입니다.

http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake

===== 이에 관한 흥미로운 기사 :

은 KDE 프로젝트는 CMake로 전환하는 이유 - 그리고 http://lwn.net/Articles/188693/

+0

나는 그것을 보았습니다. 하지만 그들은 단지 도움이되는 sooooo KDE에 불과하다고 생각합니다. –

관련 문제