CMake安装

变量说明

变量默认值
CMAKE_INSTALL_BINDIRbin
CMAKE_INSTALL_BINDIRlib
CMAKE_INSTALL_INCLUDEDIRinclude
CMAKE_INSTALL_PREFIXwin: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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值