2012-04-03 2 views
13

cmake을 사용하여 C++ 프로젝트 용 빌드 파일을 생성하고 싶습니다. 기존 Makefile 있습니다. 표준 cmake 구문을 사용하여이 Makefile을 생성하는 데 문제가 있습니다.기존 메이크 파일에서 CMakeLists 파일 만들기

섹션에 -lstdc++ -lpthread -lboost_thread-mt과 같은 표준 C++ 라이브러리를 포함하려면 어떻게해야합니까? cmake 섹션에? 또는이 파일을 ADD_DEPENDENCIES 섹션에 포함시켜야합니다. 당신이 라이브러리를 링크 할 때 add_dependencies를 사용해서는 안

target_link_libraries(your-target-name pthread boost_thread-mt etc) 

:

(OR) 이런 Makefile

답변

9

를 사용해야합니다. CMake는 모든 플랫폼에서 실행되기 때문에, GNU make와 같은 플랫폼 특정 가정에 의존 할 수는 없으며, 이는 특정 장소에서 상황을 복잡하게 만듭니다.

특히 CMake는 라이브러리 사용에 매우 강력하고 복잡한 메커니즘을 제공합니다. find_package에 라이브러리 이름을 지정하면 cmake 모듈 경로에서 라이브러리 검색 스크립트를 호출합니다. 이 스크립트 (또한 CMake로 쓰여짐)는 라이브러리의 헤더와 lib 파일의 위치를 ​​탐지하고 include_directories와 target_link_libraries와 같은 CMake 명령에 전달할 수있는 몇 개의 CMake 변수에 저장하려고 시도합니다.

이 방법에는 두 가지 문제점이 있습니다. 첫째, 검색 스크립트가 필요합니다. 다행스럽게도 CMake는 Pthreads, Boost 및 몇 가지 다른 검색 스크립트를 제공하지만 좀 더 이국적인 라이브러리를 사용하는 경우 검색 스크립트를 직접 작성해야 할 수도 있습니다. 이는 처음에는 비밀스러운 경험입니다 ...

두 번째 주요 문제점은 검색 스크립트가 결과를 반환하는 표준 방법이 없다는 것입니다. 사용 된 변수에 대한 이름 지정 규칙이 있지만 일반적으로 적용되지 않습니다. 실제로 그것은 검색 스크립트의 소스를 사용하는 방법을 알기 위해 검색 스크립트의 소스를 체크 아웃해야한다는 것을 의미합니다. 다행히도 CMake와 함께 제공되는 스크립트는 대부분 문서화가 잘되어 있습니다.

내장 스크립트는 <cmake-install-prefix>/share/cmake-2.8/Modules 같은 곳에 있습니다. 귀하의 질문에 대해서는 FindBoost.cmake 및 FindThreads.cmake 파일을 참조하십시오 (CMake는 자동으로 표준 라이브러리와 연결되어야 함). Anycorn은 이미 Boost 스크립트를 사용하기위한 몇 가지 샘플 코드를 제공 했으므로 CMake 문서 또는 검색 스크립트 파일에 직접 알아야 할 모든 것이 있습니다.

2

에서 CMakeList.txt 파일을 생성하는 간단한 도구가 있습니다. 링크하는 것은 종속성을 의미하지만 링크해야 할 때 종속성만으로는 충분하지 않습니다. CMakeLists에 메이크에서 1 변환 : 부스트와

2

당신은 정말 불행하게도, 더 간단한 일이없는 패키지 찾기

set(Boost_ADDITIONAL_VERSIONS "1.46" "1.46.0" "1.46.1") 
    set(Boost_USE_MULTITHREADED ON) # for -mt 
    find_package(Boost COMPONENTS thread) 
    if(Boost_FOUND) 
    MESSAGE(STATUS "Found Boost: ${Boost_LIBRARY_DIRS}") 
    MESSAGE(STATUS "Found Boost libraries: ${Boost_LIBRARIES}") 
    set(LIBRARIES "${LIBRARIES};${Boost_LIBRARIES}") 
    else() 
    MESSAGE(FATAL_ERROR "Boost Thread NOT FOUND") 
    endif() 

target_link_libraries(executable ${LIBRARIES}) 
관련 문제