Cmake使用

编写一个bat文件 :

::创建build文件夹,防止污染源目录
mkdir build ||^
cd build &&^
^
::使用cmake创建Makefile文件,再使用make创建可执行文件
cmake -G "MinGW Makefiles" ^
-D CMAKE_MAKE_PROGRAM="路径\make.exe" ../ &&^
make

执行bat文件之后便能在build文件夹內找到exe可执行文件


CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(my_project_name)
add_executable(app main.c add.c)

Cmake语法

将多个文件名打包

set(src_list value1;value2;...)

使用方式 : ${src_list}


list(<command> list_name value1 value2 ...)

list(LENGTH <list> <output variable>)
list(GET <list> <element index> ... <output variable>)
list(JOIN <list> <glue> <output variable>)
list(FIND <list> <value> <output variable>)
list(INSERT <list> <index> <element> ...)
list(PREPEND <list> <element> ...)
list(POP_BACK <list> [<out-var>...])
list(POP_FRONT <list> [<out-var>...])
list(REMOVE_ITEM <list> <value> [<value> ...])
list(REMOVE_AT <list> <index> [<index> ...])
list(REMOVE_DUPLICATES <list>)
list(REVERSE <list>)

list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>])
COMPARE : 指定排序方法。有如下几种值可选:
    STRING : 按照字母顺序进行排序,为默认的排序方法
    FILE_BASENAME:如果是一系列路径名,会使用basename进行排序
    NATURAL:使用自然数顺序排序
CASE : 指明是否大小写敏感。有如下几种值可选:
    SENSITIVE : 按照大小写敏感的方式进行排序,为默认值
    INSENSITIVE:按照大小写不敏感方式进行排序
ORDER : 指明排序的顺序。有如下几种值可选:
    ASCENDING : 按照升序排列,为默认值
    DESCENDING:按照降序排列

file([GLOB/GLOB_RECURSE] <list_name> <Path and FileType>)
GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。

file(GLOB src_list ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)

设置输出路径

#可执行/动态库
set(EXECUTABLE_OUTPUT_PATH ./bin)
#静态库/动态库
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

包含-创建-链接

#包含头文件
include_directories(headpath)
#包含源文件, 把dir目录中的所有源文件都储存在var变量中
aux_source_directory(<dir> <variable>)

#创建可执行
add_executable(exec_name src1 src2 ...)
#创建静态库
add_library(lib_name STATIC src1 src2 ...) 
#创建动态库
add_library(lib_name SHARED src1 src2 ...) 

#链接静态库/动态库
link_directories(<static lib path>)
link_libraries(<static lib> ...)#全局
target_link_libraries(<exe> <libname> ...)#局部

输出日志

message(<TYPE> "some message...")
(无) :重要消息
STATUS :非重要消息
WARNING :CMake 警告, 会继续执行
AUTHOR_WARNING :CMake 警告 (dev), 会继续执行
SEND_ERROR :CMake 错误, 继续执行,但是会跳过生成的步骤
FATAL_ERROR :CMake 错误, 终止所有处理过程

#宏定义
add_definitions(-DDEBUG)
#预定义宏
PROJECT_SOURCE_DIR    使用cmake命令后紧跟的目录,一般是工程的根目录
PROJECT_BINARY_DIR    执行cmake命令的目录
CMAKE_CURRENT_SOURCE_DIR    当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR    target 编译目录
EXECUTABLE_OUTPUT_PATH    重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH    重新定义目标链接库文件的存放位置
PROJECT_NAME    返回通过PROJECT指令定义的项目名称
CMAKE_BINARY_DIR    项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径
posted @ 2024-09-29 13:41  绿草蓝天  阅读(37)  评论(0)    收藏  举报