编写一个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) |
| |
| 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目录进行的构建,那么得到的就是这个目录的路径 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升