源码结构
生成可执行程序
# CMake最小版本号
cmake_minimum_required(VERSION 3.15.0)#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)#设置工程名称
project(calculate)#[[
#方法一:添加源码文件
#aux_source_directory(< dir > < variable >)
#dir:要搜索的目录
#variable:将从dir目录下搜索到的源文件列表存储到该变量中
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_SUB)
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_CUR)
]]#方法二:添加源码文件
#CMAKE_CURRENT_SOURCE_DIR 表示指令 cmake 后跟随的路径
#PROJECT_SOURCE_DIR 表示工程目录
#file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
file(GLOB SRC_SUB ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB SRC_CUR ${PROJECT_SOURCE_DIR}/*.cpp)message(${SRC_SUB})#合并源文件
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
#set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])set(SRC_LISTS ${SRC_SUB} ${SRC_CUR})#包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)#指定可执行程序输出的路径
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)#add_executable(可执行程序名 源文件名称)
add_executable(main ${SRC_LISTS})
生成静态库
# CMake最小版本号
cmake_minimum_required(VERSION 3.15.0)#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)#设置工程名称
project(calculate)#[[
#方法一:添加源码文件
#aux_source_directory(< dir > < variable >)
#dir:要搜索的目录
#variable:将从dir目录下搜索到的源文件列表存储到该变量中
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_SUB)
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_CUR)
]]#方法二:添加源码文件
#CMAKE_CURRENT_SOURCE_DIR 表示指令 cmake 后跟随的路径
#PROJECT_SOURCE_DIR 表示工程目录
#file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
file(GLOB SRC_SUB ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB SRC_CUR ${PROJECT_SOURCE_DIR}/*.cpp)message(${SRC_SUB})#合并源文件
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
#set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])set(SRC_LISTS ${SRC_SUB} ${SRC_CUR})#包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)#指定静态库输出的路径
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)#add_library(库名称 STATIC 源文件1 [源文件2] ...)
add_library(plus STATIC ${SRC_SUB})
生成动态库
# CMake最小版本号
cmake_minimum_required(VERSION 3.15.0)#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)#设置工程名称
project(calculate)#[[
#方法一:添加源码文件
#aux_source_directory(< dir > < variable >)
#dir:要搜索的目录
#variable:将从dir目录下搜索到的源文件列表存储到该变量中
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_SUB)
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_CUR)
]]#方法二:添加源码文件
#CMAKE_CURRENT_SOURCE_DIR 表示指令 cmake 后跟随的路径
#PROJECT_SOURCE_DIR 表示工程目录
#file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
file(GLOB SRC_SUB ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB SRC_CUR ${PROJECT_SOURCE_DIR}/*.cpp)message(${SRC_SUB})#合并源文件
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
#set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])set(SRC_LISTS ${SRC_SUB} ${SRC_CUR})#包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)#指定动态库输出的路径
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)#add_library(库名称 STATIC 源文件1 [源文件2] ...)
add_library(plus SHARED ${SRC_SUB})
链接静态库生成可执行程序
# CMake最小版本号
cmake_minimum_required(VERSION 3.15.0)#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)#设置工程名称
project(calculate)#[[
#方法一:添加源码文件
#aux_source_directory(< dir > < variable >)
#dir:要搜索的目录
#variable:将从dir目录下搜索到的源文件列表存储到该变量中
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_SUB)
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_CUR)
]]#方法二:添加源码文件
#CMAKE_CURRENT_SOURCE_DIR 表示指令 cmake 后跟随的路径
#PROJECT_SOURCE_DIR 表示工程目录
#file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
file(GLOB SRC_SUB ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB SRC_CUR ${PROJECT_SOURCE_DIR}/*.cpp)message(${SRC_SUB})#合并源文件
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
#set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])set(SRC_LISTS ${SRC_SUB} ${SRC_CUR})#包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)#指定可执行程序输出的路径
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)#添加静态库路径
#link_directories(<lib path>)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)#链接静态库
#link_libraries(<static lib> [<static lib>...])
#参数1:指定出要链接的静态库的名字
#可以是全名 libxxx.a
#也可以是掐头(lib)去尾(.a)之后的名字 xxx
#参数2-N:要链接的其它静态库的名字
link_libraries(plus)#add_executable(可执行程序名 源文件名称)
add_executable(main ${SRC_CUR})
链接动态库生成可执行程序
# CMake最小版本号
cmake_minimum_required(VERSION 3.15.0)#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)#设置工程名称
project(calculate)#[[
#方法一:添加源码文件
#aux_source_directory(< dir > < variable >)
#dir:要搜索的目录
#variable:将从dir目录下搜索到的源文件列表存储到该变量中
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_SUB)
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_CUR)
]]#方法二:添加源码文件
#CMAKE_CURRENT_SOURCE_DIR 表示指令 cmake 后跟随的路径
#PROJECT_SOURCE_DIR 表示工程目录
#file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
file(GLOB SRC_SUB ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB SRC_CUR ${PROJECT_SOURCE_DIR}/*.cpp)message(${SRC_SUB})#合并源文件
# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
#set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])set(SRC_LISTS ${SRC_SUB} ${SRC_CUR})#包含头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)#指定可执行程序输出的路径
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin)#添加动态库路径
#link_directories(<lib path>)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)#add_executable(可执行程序名 源文件名称)
add_executable(main ${SRC_CUR})#链接动态库,注意此命令行,要放到目标文件的后边,保证目标文件已经存在,一般放在CMakeLists.txt文件的最后
#target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <item>... [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
target_link_libraries(main PUBLIC plus)