新的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)
Run Code Online (Sandbox Code Playgroud)
来自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}")
Run Code Online (Sandbox Code Playgroud)
但该指南还讨论了在TARGETS上使用install,然后将EXPORT添加到目标安装命令.
多少这个适用于一个只有头文件库,在这个库中我没有其他文件的编译代码而不是标题?
如何应用以下步骤中描述的步骤:http://foonathan.net/blog/2016/03/03/cmake-install.html 到INTERFACE only库?我的项目中缺少.cpp文件让我质疑哪些说明适用且不适用.
mch*_*son 11
试试这个:
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)
Run Code Online (Sandbox Code Playgroud)
内容cmake/mylibConfig.cmake.in应该只是这个
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/mylibTargets.cmake")
check_required_components("@PROJECT_NAME@")
Run Code Online (Sandbox Code Playgroud)
如果你做了所有这些,不仅它使你的标题库"可安装",而且它也使它"可以找到".用户可以像这样导入您的库:
find_package(mylib CONFIG REQUIRED)
target_link_libraries(MyApp mylib) # installed include/ path automatically added
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5583 次 |
| 最近记录: |