欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CMake指令

程序员文章站 2024-03-14 11:10:28
...

CMake简单指令:CMake学习笔记(一)

1 只有main.c

test目录下只有一个main.c文件,只需在同一个文件夹下新建一个CMakeList.txt文件,内容如下:

# 需要的cmake最低版本是 2.8
cmake_minimum_required(VERSION 2.8)

工程名称是 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指令

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,其组织结构如下:
CMake指令
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,其组织结构如下:
CMake指令
大型的工程文件通常不只有一个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语法整理

  • 设置最小版本
    • 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="{&quot;mod&quot;:&quot;popu_824&quot;}"><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="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><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="{&quot;mod&quot;:&quot;popu_379&quot;}" 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="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                </div>
                        </div>
                </div>
</article>

1 只有main.c

test目录下只有一个main.c文件,只需在同一个文件夹下新建一个CMakeList.txt文件,内容如下:

# 需要的cmake最低版本是 2.8
cmake_minimum_required(VERSION 2.8)
相关标签: cmake