在上一节中通过 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})