cmake添加一个库的实现步骤
项目格式
Step2
- mathFunctions/CMakeLists.txt mysqrt.cxx MathFunctions.h
- CMakeList.txt
- tutorial.cxx
- Tutorial.h.in
cmake基本语法
设置编译器
set (CMAKE_C_COMPILER "D:/Program Files/LLVM/bin/gcc") set (CMAKE_CXX_COMPILER "D:/Program Files/LLVM/bin/g++")
CMAKE_C_COMPILER C语言编译器,CMAKE_CXX_COMPILER C++编译器。
添加库
add_subdirectory(MathFunctions)
添加的MathFunctions就是文件夹的名字也可以理解为库的名字
链接库
target_link_libraries(Tutorial PUBLIC MathFunctions)
第一个参数是生成的可执行文件,中间的是公有的,第三个参数是库的名字.
添加库的头文件
target_include_directories(Tutorial PUBLIC ${PROJECT_SOURCE_DIR}/MathFunctions ${PROJECT_BINARY_DIR})
第一个参数是生成的可执行文件,中间的是公有的,第三个参数是库的路径,应该说后面的参数都是路径.
其中:
${PROJECT_SOURCE_DIR} 这个变量是主Cmake文件的变量
${PROJECT_BINARY_DIR}这个变量是cmake -B生成的路径的变量
cmake打印字符串
message("hello world") message(${PROJECT_SOURCE_DIR}/MathFunctions)
这个就是打印出来的字符串.
库的cmake文件
这个cmake文件不需要写那么多公共命令.
cmake生辰库
add_library(MathFunctions mysqrt.cxx)
这行代码就是把cxx文件添加到库中
mian函数中使用
添加头文件
#include <MathFunctions.h>
可以直接使用尖括号,因为cmake已经把头文件添加到可执行文件中了.
然后直接调用函数即可.
让库成为可选的
cmake基本语法
设置option变量
option(USE_MYMATH "Use tutorial provided math implementation" ON)
设置一个USE_MATH的变量,第二个参数是说明字符串,第三个是启动或者关闭 ON是启动,OFF是关闭.
注意:option这个设置变量一定要在configure_file(TutorialConfig.h.in TutorialConfig.h)这行前面才可以,要不然option设置的不起作用.
cmake设置条件链接库
if (USE_MYMATH) add_subdirectory(MathFunctions) list(APPEND EXTRA_LIBS MathFunctions) list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR}) endif()
意思是如果USE_MYMATH为ON才可以链接自己的库
其中强调两行代码就是list的代码
- list(APPEND EXTRA_LIBS MathFunctions)
- list(APPEND EXTRA_INCLUDES ${PROJECT_SOURCE_DIR})
这两行代码你可以理解为依赖的库声明成一个变量列表,例如EXTRA_LIBS这个变量就是存储的MathFunctions这个库这里只有一个demo如果要链接十个八个只要在list后面空格添加就行,
EXTRA_INCLUDES这个也是同理,目的也是为了下面添加链接库和添加头文件的时候简单一点.
链接库
target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})
这里就用到EXTRA_LIBS 这个列表
添加头文件
target_include_directories(Tutorial PUBLIC ${EXTRA_INCLUDES} ${PROJECT_BINARY_DIR})
这里就用到EXTRA_INCLUDES这个列表
修改cmake配置文件
#cmakedefine USE_MYMATH
添加一行这个代码
USE_MYMATH这个变量就是对应一开始的option设置的变量
如果option设置USE_MYMATH为ON, cmake配置文件生成的头文件就会定义USE_MYMATH
这个不是自己写的是cmake自己生成的.
修改引用的源码
更新链接库的过程
如果每次主cmake文件每次链接一个库都要target_include_directories一个库名字就有点重复,所以可以修改cmake库来实现当链接这个库的时候就包含头文件了。
第一步就是修改库的cmake文件:
add_library(MathFunctions mysqrt.cxx) target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
第一行代码是添加库名字,第二行是添加库的头文件,第一个参数是库的名字,
INTERFACE:第二个参数意思是当链接这个库的时候就要包含include第三个参数的头文件,但是自己的库不使用头文件,
还有一个PUBLIC:
PUBLIC:这个的意思是不光链接这个库的需要使用库头文件,自己也是用。一般这个使用的比较多。
第三个参数就是头文件的路径,
${CMAE_CURRENT_SOURCE_DIR}
这个变量是什么意思了?这个意思是当前cmake文件的目录,这个变量和${PROJECT_SOURCE_DIR}这个变量比较相似,这个是指定项目当前的路径。
主cmake文件就可以把上面链接MathFunctions文件可以删除了。
到此这篇关于cmake添加一个库的实现步骤的文章就介绍到这了,更多相关cmake添加库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论