变量说明
变量 | 默认值 |
---|---|
CMAKE_INSTALL_BINDIR | bin |
CMAKE_INSTALL_BINDIR | lib |
CMAKE_INSTALL_INCLUDEDIR | include |
CMAKE_INSTALL_PREFIX | win:C:\Program Fils${PROJECT_NAME} unix:/user/local |
安装TARGET
install(TARGETS XHTTP
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} #可执行文件安装位置,默认目录 ${prefix}/bin
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} #动态库库,默认目录 ${prefix}/lib
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} #静态库(lib .a),默认目录 ${prefix}/lib
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
#非apple平台,安装框架目标的PUBLIC_HEADER属性文件,默认目录 ${prefix}/include
)
安装文件
install(FILES src/XHttp/xdemoApi.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
安装目录
#安装src/Http/目录下所有的头文件
install(DIRECTORY src/Http/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN *.h)
#安装排除.cpp .c文件,通过正则表达式
install(DIRECTORY src/Http/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING REGEX \\.(cpp|c) EXCLUDE
#同时指定多重规则
install(DIRECTORY src/Http/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING
REGEX \\.(cpp|c) EXCLUDE
REGEX \\.(h|hpp)
PATTERN *.h
PATTERN *.txt
自定义安装指令
install(SCRIPT fileName | CODE cmakecode
[ALL_COMPONENTS | COMPONENT component]
[EXCLUDE_FROM_ALL])
#按顺序执行
install(CODE [[
message("CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}")
message("CMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}")
message("CMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}")
message("CMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}")
]])
#可以指定多个code或script,他们将按照顺序执行。其他选项最多指定一次
install(CODE [[message("A")]]
SCRIPT myinstall.cmake
CODE [[message("B")]]
)
安装导出
#第一步导出
install(TARGETS XHTTP
EXPORT XHTTPConfig #一定要导出,否则在下一步EXPORT的时候将提示 unknown export
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
#第二步安装导出
# Export the targets to a script
#默认到处名称为到处对象名.cmake eg:EXPORT demo 则file:demo.cmake
#为嘛符合配置文件规则,所以将到处名称按照配置文件命名
install(EXPORT XHTTPConfig
FILE XHTTPConfig.cmake #file 默认名称 exportName.cmake
NAMESPACE XHttp:: #如指定了NAMESPACE,则在导入的时候需要加上命名空间
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/XHttp
)
#由于指定了NAMESPACE,所以导入的时候需要指定命名空间
add_library(Xhttp::XHTTP)
安装命令
cmake --install . --prefix "D:/work/install/xdemo"
#指定了--prefix,则${CMAKE_INSTALL_PREFIX}="D:/work/install/xdemo"
#如果不指定 --prefix ,则默认位置为${CMAKE_INSTALL_PREFIX}
D:/work/install/xdemo/bin
D:/work/install/xdemo/lib
D:/work/install/xdemo/include
安装配置文件
为了方便其他CMake项目引入库,首选的方法是提供配置文件。文件可通过find_package()
找到。
配置文件命名:
<PackageName>Config.cmake
<lowercasePackageName>-config.cmake
如果将安装基点添加到CMAKE_PREFIX_PATH
中,则findpackage()
默认位置如下
findpackage()
路径配置
eg:XHTTP.lib
#方法一:设置CMAKE_PREFIX_PATH,将XHTTP的安装路径添加到CMAKE_PREFIX_PATH
list(APPEND CMAKE_PREFIX_PATH "D:\\123\\XHttp")
#方法二:设置XHTTP_DIR,XHTTP_DIR必须包含配置文件(.cmake)
set(XHTTP_DIR "D:\\123\\XHttp\\lib\\cmake\\XHttp")
#判断是否找到package
message("XHTTP_FOUND=${XHTTP_FOUND}")
if(XHTTP_FOUND)
target_link_libraries(${TARGET_NAME} XHTTP::XHTTP)
endif()
查找并引入库
#指定库的安装目录
list(APPEND CMAKE_PREFIX_PATH "d://123//xhttp")
#查找XHTTP
find_package(XHTTP REQUIRED)
message("XHTTP_FOUND=${XHTTP_FOUND}")
#如果查找库成功,则查找对应的头文件所在位置
if(XHTTP_FOUND)
target_link_libraries(hello XHttp::XHTTP)
#find header path
find_path(XHTTP_INCLUDES NAMES "xhttpapi.h")
message("XHTTP_INCLUDES=${XHTTP_INCLUDES}")
#引入头文件
include_directories(${XHTTP_INCLUDES})
endif(XHTTP_FOUND)