소스 디렉터리의 정적 라이브러리에 연결하도록 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
리눅스의 전면에, 그리고 .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)
'IT Share you' 카테고리의 다른 글
C # 애플리케이션에서 전역 키보드 캡처 (0) | 2020.11.07 |
---|---|
Any의 반대 방법은 무엇입니까 (0) | 2020.11.07 |
DbSet의 모든 요소를 어떻게 제거해야합니까? (0) | 2020.11.07 |
더 많은 열이있는 테이블에 Oracle 삽입 선택 (0) | 2020.11.07 |
Python 및 Intellisense (0) | 2020.11.07 |