CMake指令
CMake简单指令:CMake学习笔记(一)
工程名称是 test
project(test)
生成的二进制文件名为 main
需要的源文件为 main.c
add_executable(main main.c)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
之后在test文夹下执行
cmake .
make
- 1
- 2
2 多个C文件在同一文件夹下
假设有多个源文件在test文件夹下,文件结构如下:
cmake_minimum_required (VERSION 2.8)
project (test)
# 将本文件夹下的源文件添加到变量 SRC_LIST 中
aux_source_directory(. SRC_LIST)
# 使用变量 SRC_LIST 中的源文件
add_executable(main ${SRC_LIST})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3 多个不同目录下多个C文件
假设我有一个工程文件夹test,其组织结构如下:
CMakeList的内容如下:
cmake_minimum_required(VERSION 2.8)
project(test)
添加工程头文件的搜索路径(多个路径空格分开)
include_directories(func_file1 func_file2)
将func_file1 文件夹下的源文件添加到变量 SRC_LIST1 中
将func_file2 文件夹下的源文件添加到变量 SRC_LIST2 中
aux_source_directory(func_file1 SRC_LIST1)
aux_source_directory(func_file2 SRC_LIST2)
add_executable(main main.c ${SRC_LIST1} ${SRC_LIST2})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
在test文件夹下执行
cmake .
make
- 1
- 2
4 正式的组织结构(build文件夹正确使用)
目录结构与CMakeList编写
假设我有一个工程文件夹test,其组织结构如下:
大型的工程文件通常不只有一个CMakeList.txt
第一个 CMakeList.txt 中内容如下:(build下面那个)
# 规定需要的cmake最低版本是 2.8
cmake_minimum_required(VERSION 2.8)
# 工程名称是 test
project(test)
# 向工程添加存放源文件的子目录 src
# 子文件夹可以有CMakeLists.txt
add_subdirectory(src)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
第二个 CMakeList.txt 中内容如下:(src里面那个)
# 本目录下源文件名称都存储在 SRC_LIST 变量中
aux_source_directory(. SRC_LIST)
添加工程头文件的搜索路径(多个路径空格分开)
include_directories(../include)
生成可执行文件的名称叫 main
使用存放在 SRC_LIST 变量中的源文件
add_executable(main ${SRC_LIST})
设置输出二进制文件的存放位置为 ${PROJECT_SOURCE_DIR}/bin
${PROJECT_SOURCE_DIR} 表示根目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
将生成的对象文件放入build文件夹
上面几次执行 cmake . 操作后,源文件目录下多出了好多额外的文件及文件夹,污染了源文件(影响源文件的可读性),下面这种方法可以使生成的对象存放在build文件夹中:
# 进入build文件夹
cd build
# 执行cmake
cmake …
# 执行make
make
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
查看一下,生成的文件是不是都在build文件夹中了,因为设置了二进制的输出文件目录,输出的文件也在bin目录之中了。
来欣赏下cmake + make后的文件目录(展开到三级目录)
带静态、动态库的组织结构
(后续补上)
cmake语法整理
- 设置最小版本
- cmake_minimum_required (VERSION 2.8)
- 设置工程名称
- project (test)
- 添加工程子文件夹(多个CMakeLists)
- add_subdirectory (src)
- 添加工程头文件查找目录
- include_directories (…/include)
- 将目录source1中的源文件添加到 SRC_LIST1 变量中
- aux_source_directory (source1 SRC_LIST1)
- 设置生成的可执行文件名称
- add_executable (main ${SRC_LIST1})
- 设置工程输出二进制文件路径
- set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
路径的注意事项
CMakeList.txt中的本文件夹就是其文件所在的文件夹
" . " 代表本文件夹
" abc " 代表本文件夹下的abc文件夹
" ../abc " 代表和本文件夹同级的abc文件夹
“${PROJECT_SOURCE_DIR}/abc” 代表根文件夹下的abc文件夹
- 1
- 2
- 3
- 4
- 5
- 6
</div><div><div></div></div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count">3</span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true">
<use xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
<li class="tool-item tool-more">
<a>
<svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
</a>
<ul class="more-box">
<li class="item"><a class="article-report">文章举报</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/pix_csdn">
<img src="https://profile.csdnimg.cn/F/6/4/3_pix_csdn" class="avatar_pic" username="pix_csdn">
<img src="https://g.csdnimg.cn/static/user-reg-year/2x/3.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/pix_csdn" data-report-click="{"mod":"popu_379"}" target="_blank">pix_csdn</a></span>
</div>
<div class="text"><span>发布了56 篇原创文章</span> · <span>获赞 32</span> · <span>访问量 3万+</span></div>
</div>
<div class="right-message">
<a href="https://im.csdn.net/im/main.html?userName=pix_csdn" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
</a>
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
</div>
</div>
</article>
上一篇: CMake介绍及用法示例
下一篇: Linux下CMake安装使用