IT Share you

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

shareyou 2020. 11. 7. 17:53
반응형

소스 디렉터리의 정적 라이브러리에 연결하도록 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가 자동으로 추가 lib하고을 .a리눅스의 전면에, 그리고 .libWindows의 끝.

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

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)

참고 URL : https://stackoverflow.com/questions/14077611/how-do-i-tell-cmake-to-link-in-a-static-library-in-the-source-directory

반응형