常用构建工具
一、makefile
makefile脚本文件 --make命令
二、cmake
CMakeLists.txt脚本文件
cmake命令生成makefile文件,在执行make文件生成可执行文件
cmake使用
linux 命令行模式
安装 sudo apt install cmake
构建
//cmake命令生成make cmake ./ //执行make make
CMakeLists详解
# 1、支持cmake的最小版本 #号单行注释 #[[....]]多行注释
#[[
支持cmake的最小版本
支持cmake的最小版本
支持cmake的最小版本
]]
cmake_minimum_required(VERSION 3.5.0)
#2、项目名称 随便指定
project(CMakeDemo)
#可随意指定变量
set(SRC_LIST div.cpp main.cpp mul.cpp sub.cpp add.cpp)
#打包的添加可执行的文件
#方案一:
#add_executable(可执行程序名 源文件名称)
#app最后生成的可执行程序的名称
#div.cpp main.cpp mul.cpp sub.cpp add.cpp 需要用到的源文件,从当前路径开始找
#add_executable(app div.cpp main.cpp mul.cpp sub.cpp add.cpp)
#方案二:
#变量定义
#SRC_LIST 资源路径
set(SRC_LIST div.cpp main.cpp mul.cpp sub.cpp add.cpp)
#执行程序的名称 资源文件变了
#add_executable(app ${SRC_LIST})
#方案三:可以不用手动一个一个添加资源文件,已目录方式
#搜所文件
#PROJECT_SOURCE_DIR : 项目源路径 该路径为cmake命令后面指定的路径 ,
#例如:cmake /jett/bin即表示PROJECT_SOURCE_DIR=/jett/bin
#将${PROJECT_SOURCE_DIR}搜索到的资源文件放入变量 SRC_LIST
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_LIST2)
#方案四:可以不用手动一个一个添加资源文件,已目录方式
#CMAKE_CURRENT_SOURCE_DIR:这个路径表示CMakeLists.txt文件所在的路径 当前路径下
#详情查看cmakefile 获取文件相关文档
#GLOB获取目录下匹配的文件
#GLOB_RECURSE 用于递归地获取匹配指定通配符模式的文件
#SRC_LIST3 用于存储查询到的文件列表的变量
#${CMAKE_CURRENT_SOURCE_DIR}/*.cpp 查询当前路径下满足条件的文件
file(GLOB SRC_LIST3 ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
#目录操作 比如源文件和头文件不在同一个目录 include src
#指定头文件路径,这样main.cpp中使用到对应的文件可以直接 #include "head.h",不用写相对路径找到
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
#设置可执行程序的输出路径 路径如果不存在,会自动创建,编译成可执行程序需要
set(HOME /jett/bin)
set(EXECUTABLE_OUTPUT_PATH ${HOME})
#指定库生成路径LIBRARY_OUTPUT_DIRECTORY
set(LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
#生成出来的a或so文件需要发布库文件和头文件给用户使用 libcalc.so head.h
#
link_directories( ${CMAKE_CURRENT_SOURCE_DIR}/lib )
#编译库文件
#windows 静态库 .lib 动态库 .dll
#linux 静态库 .a 动态库 .so
#准备好需要的cpp文件 src/add.cpp div sub mul
#生成动态链接库SHARED
#生成静态链接库STATIC
add_library(calc SHARED ${SRC_LIST})
#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test/)
add_subdirectory(test)
#连接动态库 一般写到最后一行 PRIVATE PUBLIC INTERFACE
//表示calc库需要链接libace_napi.z.so
target_link_libraries(calc PUBLIC libace_napi.z.so)
#CMake嵌套问题 有多个CMakeList.txt文件嵌套问题
#add_subdirectory(子CMakeList.txt文件的路径)
#自定义宏 add_definitions(-D宏名称) 一般处理日志
add_definitions(-DDEBUG)
#日志输出
message("srcPath:}"${PROJECT_SOURCE_DIR})
#list操作
#向list中添加数据
list(APPEND SRC_LIST add.cpp sub.cpp mul.cpp div.cpp main.cpp)
#移除list中固定值
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
list(REMOVE_ITEM SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
#移除list中索引位置的数据
list(REMOVE_AT SRC_LIST 2)
#获取list的长度 把SRC_LIST3的长度存入VAR
list(LENGTH SRC_LIST3 VAR)
#获取list中索引为2的数据存入VAR
list(GET SRC_LIST 2 VAR)
#字符串的连接 比如原来是abc 连接后是 axxxbxxxcxxx
list(JOIN SRC_LIST xxx VAR)
#查找list中指定元素存入VAR 找不到返回-1
list(FIND SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp VAR)
#在list中的指定位置插入数据 在SRC_LIST中索引为2的位置存入ABC
list(INSERT SRC_LIST 2 ABC)
#在list中0号位置存入
list(PREPEND SRC_LIST ABC)
#当成栈使用 移出list最后取数据
list(POP_BACK SRC_LIST ABC)
#当成栈使用 移出list第一个取数据
list(POP_FRONT SRC_LIST ABC)
#list数据翻转
list(REVERSE SRC_LIST)
#list排序
#COMPARE 默认STRING按字母顺序 FILE_BASENAME文件名顺序 NATURAL使用自然数顺序
#CASE 默认SENSITIVE大小写敏感 INSENSITIVE大小写不敏感
#ORDER 默认ASCENDING升序 DESCENDING降序
#list(SORT SRC_LIST COMPARE)