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 @   绿草蓝天  阅读(2)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
点击右上角即可分享
微信分享提示