CMake使用【c/c++】
目录
一.CMake概述
二.CMake的使用
1.注释
2.只有一个源文件的程序编译
3.set
4.搜索文件
5.指定头文件
一.CMake概述
CMake是一个跨平台的项目构建的工具。(Build System Generator)。 它不直接编译代码,而是根据简单的配置文件(CMakeLists.txt
),为你熟悉的编译环境(如 Make)生成相应的构建文件(如 Makefile项目文件)。
二.CMake的使用
1.注释
可以使用 # 进行单行注释
#这是一个CMakeLists.txt的文件
也可以使用 #[ [ ] ] 进行块注释
#[[这是一个CMakeLists.txt的文件
这是一个CMakeLists.txt的文件
这是一个CMakeLists.txt的文件]]
2.只有一个源文件的程序编译
- 首先准备一些文件来方便讲解
//add.h
#ifndef __MY_ADD__
#define __MY_ADD__int add(int,int);#endif
//add.cc
#include"add.h"int add(int a,int b)
{return a+b;
}
//sub.h
#ifndef __MY_SUB__
#define __MY_SUB__int sub(int,int);#endif
//sub.cc
#include"sub.h"int sub(int a,int b)
{return a-b;
}
//main.cc#include<iostream>
#include"add.h"
#include"sub.h"using namespace std;int main()
{int x=1,y=2;cout<<add(x,y)<<endl;cout<<sub(x,y)<<endl;return 0;
}
- 在上述目录下面添加一个CMakeLists.txt的文件,注意大小写。内容如下
cmake_minimum_required(VERSION 3.14)
project(test)
add_excutable(main main.cc;add.cc;sub.cc)
cmake_minimum_quired
cmake_minimum_quired的作用是指定当前cmake的最小版本,如果当前版本小于指定的版本,会报错
project
定义工程名称,并可指定工程的版本、工程描述、web主页地址、支持的语言(默认情况支持所有语言),如果不需要这些都是可以忽略的,只需要指定出工程名字即可。
add_excutable(生成的可执行程序名 源文件)
生成一个可执行程序。注意:可执行程序名与项目名称没有关系,同时,如果有多个原文件,他们可以用空格或者;隔开。
- 接下来直接cmake
我们可以看到,当cmake之后,会生成一个Makefile的文件,然后我们直接make,就能生成可执行程序。
注意:
- cmake后面要带路径,该路径是CMakeLists.txt所在的路径。
- 同时,直接在CMakeLists.txt这个目录生成makefile文件时,也会生成其他的几个文件,他会干扰我们找其他文件比如源文件,因此,我们可以在当前目录下创建一个build目录,在build目录下面cmake,生成的其他文件就会在build目录下。
3.set
1.set 可以设置变量
cmake_minimum_required(VERSION 3.14)
project(test)
set(SRC main.cc add.cc sub.cc)
add_executable(main ${SRC})
#set 可以把main.cc add.cc sub.cc 设置为SRC变量 然后用于add_excutable
2.指定使用c++的标准,比如C++98 C++11 C++17 C++20 等
cmake_minimum_required(VERSION 3.14)
project(test)
#指定使用c++11
set(CMAKE_CXX_STANDARD 11)
add_executable(main main.cc;add.cc;sub.cc)
3.指定可执行程序的存放路径(如果没有路径,会自己创造)
cmake_minimum_required(VERSION 3.14)
project(test)
#放在自己的家目录
set(EXCUTABLE_OUTPUT_PATH /home/username)
add_executable(main main.cc;add.cc;sub.cc)
4.搜索文件
在构建项目时,我们经常遇见原文件太多的时侯。这时只能把所有文件写在add_excutable上,有没有什么办法能解决这个问题呢。
1.aux_source_directories(路径名 变量)
这个命令会把路径下的所有源文件存储到变量当中
cmake_minimum_required(VERSION 3.14)
project(test)
aux_source_directories(${CMAKE_CURRENT_SOURCE_DIR} SRC)
add_executable(main SRC)
2.file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
- GLOB 表示就在该目录下搜索
- GLOB_RECURSE 表示会在该目录下递归的搜索
cmake_minimum_required(VERSION 3.14)
project(test)
#注意和aux_source_directories相比,file要加文件的类型,所谓的类型其实就是后缀名
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cc)
add_executable(main SRC)
CMAKE_CURRENT_SOURCE_DIR 宏表示当前访问的 CMakeLists.txt 文件所在的路径。
5.指定头文件
include_directories(头文件所在的路径)
在编译源文件的时候,有时候需要指定头文件所在的路径,这时就可以使用include_directories这个命令
cmake_minimum_required(VERSION 3.14)
project(test)
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cc)
file_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(main SRC)