[cmake] 소스 디렉터리의 정적 라이브러리에 연결하도록 CMake에 어떻게 지시합니까?

주로 CMake에 대한 경험을 얻기 위해 CMake로 변환하려는 Makefile이있는 작은 프로젝트가 있습니다. 이 예제의 목적을 위해 프로젝트에는 소스 파일 (C ++, 언어가 특별히 관련이 없다고 생각하지만)과 내가 다른 곳에서 복사 한 정적 라이브러리 파일이 포함되어 있습니다. 논쟁을 위해 라이브러리에 대한 소스 코드를 사용할 수 없다고 가정합니다. .a 파일과 해당 헤더 만 있습니다.

내 수제 Makefile에는 다음 빌드 규칙이 포함되어 있습니다.

main: main.o libbingitup.a
    g++ -o main main.o libbingitup.a

잘 작동합니다. 이를 재현하도록 CMake에 어떻게 지시합니까? 물론 말 그대로이 정확한 메이크 파일이 아니라 동등한 연결 명령을 포함하는 것입니다. 나는 명백하지만 순진한 방법을 시도했습니다.

add_executable(main main.cpp libbingitup.a)

또는

add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)

link_directories(.)또는 add_library(bingitup STATIC IMPORTED)등등 과 함께 다양한 것뿐만 아니라 지금까지 성공적인 연결을 초래하는 것은 없습니다. 나는 무엇을해야합니까?


버전 세부 정보 : GCC 4.6.3을 사용하는 Linux (Kubuntu 12.04)의 CMake 2.8.7



답변

CMake는 링크 라이브러리에 대한 전체 경로를 전달하는 것을 선호하므로 libbingitup.a가에 있다고 가정 ${CMAKE_SOURCE_DIR}하면 다음 작업이 성공해야합니다.

add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a)


답변

전체 경로를 포함하지 않으려면 다음을 수행 할 수 있습니다.

add_executable(main main.cpp)
target_link_libraries(main bingitup)

bingitup CMake 프로젝트에서 정적 라이브러리를 만드는 경우 대상에 부여 할 이름과 동일합니다.

add_library(bingitup STATIC bingitup.cpp)

CMake는 Linux에서 lib전면과 .a끝에 자동으로 추가합니다..lib Windows의 경우 끝에 .

라이브러리가 외부인 경우 다음을 사용하여 라이브러리에 경로를 추가 할 수 있습니다.

link_directories(/path/to/libraries/)


답변

도움이 되었네요 …

http://www.cmake.org/pipermail/cmake/2011-June/045222.html

그들의 예에서 :

ADD_LIBRARY(boost_unit_test_framework STATIC IMPORTED)
SET_TARGET_PROPERTIES(boost_unit_test_framework PROPERTIES IMPORTED_LOCATION /usr/lib/libboost_unit_test_framework.a)
TARGET_LINK_LIBRARIES(mytarget A boost_unit_test_framework C)


답변