首页 > 编程知识 正文

cmake生成可执行文件,webconfig文件在哪

时间:2023-05-03 20:35:46 阅读:20964 作者:138

安装CMake动态库并生成XxxConfig.CMake文件的文章目录安装CMake动态库并生成XxxConfig.CMake文件概述说明set _ target _ propertiees ies _ file write _ basic _ package _ version _ fileinstalltargetsfiles|programs export

引言

我之前说《使用 CMake 生成动态库/静态库》,既然写了动态库,那一定会提供给别人调用,我们来看看怎么调用吧

写过cmake的人,cmake通过find_package查找动态库,find_package查找XxxConfig.cmake或xxx-config.cmake或find XXX. 您应该知道上述文件的显示顺序。前两个文件通常由库创建者提供,后者主要用于在库创建者未提供前两个文件时自己创建对find_package的调用。

直接展示在CMakeLists.txt上

cmake _ minimum _ required (版本3.16 )项目) foolibraryversion1.0.0) set(cmake_cxx_standard11 ) add_ t _ properties ($ { project _ name } properties public _ header library.h ) t header接口$ build _ interface 3360 $ { $ install _ interface 3360 include } set (配置包含(cmakepackageconfighelpers ) configure _ package _ config _ file () foolibraryconfig.cmake install _ destination $ { config _ file _ path } path _ vars cmake _ install _ inclu ide dir } wite _ basic _ package _ version _ file ($ { cmake _ current _ binary _ dir }/$ {项目_ name } ) config version.config compatibilitysamemajorversion (install ) targets $ {项目_ name } export $ {项目_ name } tarrgets 目标)导出目标目标目标$ { config _ file _ path } ) install (files $ { cmake _ binary _ dir }/foolibraryconnent

@ package _ init @ include ($ { cmake _ current _ list _ dir }/@ project _ name @ targets.cmake ' ) get _ target set ST

轻松获取find_package(foolibrary ) set _ target _ properties 3359 cmake.org/cmake/help/latest/command/set _ target

安装set _ target _ properties (target1target2. properties prop1value1prop2value2. )时,指定在PUBLIC_HEADER后面的标头

t

arget_include_directories

https://cmake.org/cmake/help/latest/command/target_include_directories.html

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE] <INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

上面的写法是可重定位的,PRIVATE 和 PUBLIC 会设置 targe t的 INCLUDE_DIRECTORIES 属性;PUBLIC 和 INTERFACE 会设置给 target 的 INTERFACE_INCLUDE_DIRECTORIES 属性;里面有的那两个参数叫做什么生成表达式,也不知这个翻译对不对,官网传送门cmake-generator-expressions

configure_package_config_file

https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html

configure_package_config_file(<input> <output> INSTALL_DESTINATION <path> [PATH_VARS <var1> <var2> ... <varN>] [NO_SET_AND_CHECK_MACRO] [NO_CHECK_REQUIRED_COMPONENTS_MACRO] [INSTALL_PREFIX <path>] )

与 configure_file 差不多,但是这个用来写 cmake config 文件会好很多,INSTALL_DESTINATION config文件将要安装的位置,PATH_VARS 指定的变量,可以在 Config.cmake.in 文件中类似这样 @PACKAGE_VAR1@ 引用,这种用法可重定位,而不是硬编码

write_basic_package_version_file

https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html

write_basic_package_version_file(<filename> [VERSION <major.minor.patch>] COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion> [ARCH_INDEPENDENT] )

VERSION 不指定的话就用 PROJECT_VERSION,都没有指定的话就会报错;COMPATIBILITY 版本兼容,有好几个选项,具体看官网

install

https://cmake.org/cmake/help/latest/command/install.html

install(TARGETS <target>... [...])install({FILES | PROGRAMS} <file>... [...])install(DIRECTORY <dir>... [...])install(SCRIPT <file> [...])install(CODE <code> [...])install(EXPORT <export-name> [...]) TARGETS install(TARGETS targets... [EXPORT <export-name>] [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE| PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE] [DESTINATION <dir>] [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] [NAMELINK_ONLY|NAMELINK_SKIP] ] [...] [INCLUDES DESTINATION [<dir> ...]] ) FILES|PROGRAMS install(<FILES|PROGRAMS> files... TYPE <type> | DESTINATION <dir> [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [COMPONENT <component>] [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

TYPE 取值以及默认路径; GNUInstallDirs Variable 需要 include(GNUInstallDirs)

TYPE ArgumenGNUInstallDirs VariableBuilt-In DefaultBIN${CMAKE_INSTALL_BINDIR}binSBIN${CMAKE_INSTALL_SBINDIR}sbinLIB${CMAKE_INSTALL_LIBDIR}libINCLUDE${CMAKE_INSTALL_INCLUDEDIR}includeSYSCONF${CMAKE_INSTALL_SYSCONFDIR}etcSHAREDSTATE${CMAKE_INSTALL_SHARESTATEDIR}comLOCALSTATE${CMAKE_INSTALL_LOCALSTATEDIR}varRUNSTATE${CMAKE_INSTALL_RUNSTATEDIR}<LOCALSTATE dir>/runDATA${CMAKE_INSTALL_DATADIR}<DATAROOT dir>INFO${CMAKE_INSTALL_INFODIR}<DATAROOT dir>/infoLOCALE${CMAKE_INSTALL_LOCALEDIR}<DATAROOT dir>/localeMAN${CMAKE_INSTALL_MANDIR}<DATAROOT dir>/manDOC${CMAKE_INSTALL_DOCDIR}<DATAROOT dir>/doc

如果不指定 PERMISSIONS ,FILES 默认权限为 OWNER_WRITE, OWNER_READ, GROUP_READ, WORLD_READ,PROGRAMS 额外还有 OWNER_EXECUTE, GROUP_EXECUTE, WORLD_EXECUTE 权限

EXPORT

需要 install TARGETS 的时候 EXPORT 才行

install(EXPORT <export-name> DESTINATION <dir> [NAMESPACE <namespace>] [[FILE <name>.cmake]| [PERMISSIONS permissions...] [CONFIGURATIONS [Debug|Release|...]] [EXPORT_LINK_INTERFACE_LIBRARIES] [COMPONENT <component>] [EXCLUDE_FROM_ALL])

由于个人水平有限,文中若有不合理或不正确的地方欢迎指出改正

若文中个人文章链接打不开,请在站内寻找同名文章

文章可能更新不及时,请以个人博客处文章为准

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。