目录
项目格式
cmake基本语法
添加库
链接库
添加库的头文件
cmake打印字符串
库的cmake文件
cmake生辰库
mian函数中使用
让库成为可选的
cmake基本语法
设置option变量
cmake设置条件链接库
链接库
添加头文件
修改cmake配置文件
修改引用的源码
项目格式
Step2
mathFunctions/CMakeLists.txt mysqrt.cxx MathFunctions.h
CMakeList.txt
tutorial.cxx
Tutorial.h.in
cmake基本语法
添加库
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自己生成的.
修改引用的源码