CMake入门实践(二)

在上一节中通过 CMake 构建一个最简单的 HelloWorld 项目,但实际应用中,项目的文件会很多,这需要我们要学会在多个文件或者文件夹的情况下构建项目。本节继续介绍:

一、单目录,多文件

新建 HelloWorld2 项目文件中,有4个文件,分别是 CMakeLists.txt / main.cpp / display.h / display.cpp 。每个文件的内容如下:

CMakeLists.txt :

cmake_minimum_required(VERSION 3.9)

project(HelloWorld2)

set(CMAKE_CXX_STANDARD 11)

add_executable(HelloWorld2 main.cpp display.cpp)

main.cpp :

#include <iostream>
#include "display.h"

int main() {
    show();
    return 0;
}

display.h :

#ifndef HELLOWORLD2_DISPLAY_H
#define HELLOWORLD2_DISPLAY_H

void show();

#endif 

display.cpp :

#include <iostream>
#include "display.h"

void show()
{
    std::cout<<"Hello,World!"<<std::endl;
}

构建工程的过程和第一节简单的 HelloWorld 项目过程是一样的。但在 CMakeLists.txt 文件中添加执行命令时,添加了两个源文件  add_executable(HelloWord2 main.cpp display.cpp) 。很容易理解就是把要编译的源文件放在一起编译。当要编译的源文件不多时,可以如此表达。但当文件很多时,为简便起见,使用 aux_source_directory 命令,该命令的作用是查找指定目录下的所有源文件,然后讲结果保存在指定的变量名中。它的语法:

aux_source_directory(<dir> <variable>)

// 其中 dir 表示要查找的目录, variable 表示把所有源文件存到这个变量里面。

上面的 CMakeLists.txt 文件可以修改为:

cmake_minimum_required(VERSION 3.9)

project(HelloWorld2)

set(CMAKE_CXX_STANDARD 11)

aux_source_directory(. source_list)
// . 表示当前目录, source_list 为指定的变量名

add_executable(HelloWorld2 ${source_list})

二、多目录,多文件

新建一个 HelloWorld3 项目,有2个文件和一个子文件 function,其中2个文件分别为 CMakeLists.txt / main.cpp ;子文件 function  包含两个文件 display.h / display.cpp 。 结构目录如下:

/HelloWorld3/
    -- CMakeLists.txt
    -- main.cpp
    -- function/
          -- display.h
          -- display.cpp

将上面的 CMakeLists.txt 文件内容进行修改:

cmake_minimum_required(VERSION 3.9)

project(HelloWorld3)

set(CMAKE_CXX_STANDARD 11)

add_executable(HelloWorld3 main.cpp function/display.cpp)

当文件很多时,使用 aux_source_directory 命令:

cmake_minimum_required(VERSION 3.9)

project(HelloWorld3)

set(CMAKE_CXX_STANDARD 11)

aux_source_directory(. sourceList)

add_executable(HelloWorld3 ${sourceList})

猜你喜欢

转载自blog.csdn.net/JACK_YOUNG007/article/details/88840229