2017-12-08 31 views
0

새로운 CMake 사용자가 여기 있습니다.설치 및 내보내기 전용 인터페이스 라이브러리, CMake

나는 다음과 같은 CMake의 파일 만 라이브러리 간단한 헤더를했습니다

:

cmake_minimum_required(VERSION 3.7) 

project(mylib VERSION 0.1 LANGUAGES CXX) 

set(CMAKE_CXX_STANDARD 14) 
#add_compile_options(-Wa -aslh) 


# Define the library target 
add_library(mylib INTERFACE) 
target_include_directories(mylib INTERFACE include/) 


add_executable(mytest test/basic_checks.cpp) 
target_link_libraries(mytest mylib) 

내가 라이브러리를 설치하고 그것을 가지고 얻기에 몇 가지 단계가 있습니다 배운

http://foonathan.net/blog/2016/03/03/cmake-install.html에서 다른 CMake 프로젝트에서 사용할 수 있습니다. 먼저 "설치"되어야하며 "내보내기"해야합니다. 그럼 find_package가 있지만 첫 두 단계를 끝내면 그 다리를 건너 죠.

그래서 예 다음, 난 내 CMake 파일의 맨 아래에 다음을 추가 할 수 있음을 알 :

# Install the header file. 
install(FILES include/mylib.hpp DESTINATION "include/mylib-${PROJECT_VERSION}") 

뿐만 아니라 대상에 수출을 추가 한 후 대상에서 설치, 사용 및 대한 가이드 회담 설치 명령.

헤더 이외의 파일로 컴파일 된 코드가없는 머리말 전용 라이브러리에는이 정도가 적용됩니까?

어떻게 설명합니까? http://foonathan.net/blog/2016/03/03/cmake-install.html INTERFACE 전용 라이브러리에 있습니까? 내 프로젝트에서 .cpp 파일이 부족하여 어떤 지침이 적용되고 적용되지 않는지 궁금해합니다.

+0

CMake는 [문서] (https://cmake.org/cmake/help/v3.9/command/add_library.html#interface-libraries) 말한다 * INTERFACE * 라이브러리 **가 설치 될 수 있습니다 **. 가이드를 따르기 만하면됩니다. – Tsyvarev

답변

0

이 시도 : cmake/mylibConfig.cmake.in의 내용 만이

이 모든 걸 할 경우, 그것은 당신의 헤더 전용 라이브러리 '설치'하게 할뿐만 을
@[email protected] 

include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]") 
check_required_components("@[email protected]") 

해야

cmake_minimum_required(VERSION 3.7) 

project(mylib VERSION 0.1 LANGUAGES CXX) 

set(CMAKE_CXX_STANDARD 14) 
#add_compile_options(-Wa -aslh) 


# Define the library target 
add_library(mylib INTERFACE) 
target_include_directories(mylib INTERFACE 
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> 
    $<INSTALL_INTERFACE:include> 
) 

include(CMakePackageConfigHelpers) 
write_basic_package_version_file(
    "${PROJECT_BINARY_DIR}/mylibConfigVersion.cmake" 
    VERSION 0.1 
    COMPATIBILITY AnyNewerVersion 
) 

install(TARGETS mylib 
    EXPORT mylibTargets 
    LIBRARY DESTINATION lib COMPONENT Runtime 
    ARCHIVE DESTINATION lib COMPONENT Development 
    RUNTIME DESTINATION bin COMPONENT Runtime 
    PUBLIC_HEADER DESTINATION include COMPONENT Development 
    BUNDLE DESTINATION bin COMPONENT Runtime 
) 

include(CMakePackageConfigHelpers) 
configure_package_config_file(
    "${PROJECT_SOURCE_DIR}/cmake/mylibConfig.cmake.in" 
    "${PROJECT_BINARY_DIR}/mylibConfig.cmake" 
    INSTALL_DESTINATION lib/cmake/mylib 
) 

install(EXPORT mylibTargets DESTINATION lib/cmake/mylib) 
install(FILES "${PROJECT_BINARY_DIR}/mylibConfigVersion.cmake" 
       "${PROJECT_BINARY_DIR}/mylibConfig.cmake" 
     DESTINATION lib/cmake/mylib) 
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ DESTINATION include) 


add_executable(mytest test/basic_checks.cpp) 
target_link_libraries(mytest mylib) 

을, 그러나 또한 그것을 '발견 할 수있는'것으로 만든다. 사용자가과 같이 라이브러리를 가져올 수있을 것입니다 :

find_package(mylib CONFIG REQUIRED) 
target_link_libraries(MyApp mylib) # installed include/ path automatically added