注释
单行注释
CMake中使用#
进行单行注释
1 2
| cmake_minimum_required(VERSION 3.0.0)
|
多行注释
CMake中使用#[[]]
进行多行注释
1 2 3 4
|
cmake_minimum_required(VERSION 3.0.0)
|
单个源文件
目标:编写cpp
文件,编译后输出Hellp world!
c_file
1 2 3 4 5 6
| #include<stdio.h> int main(){ printf("Hello world!"); return 0; }
|
CMakeLists.txt
1 2 3 4 5 6 7 8
| cmake_minimum_required(VERSION 3.0.0)
project(Hello)
add_executable(Hello main.cpp)
|
文件结构

编译项目
生成Makefile
1
| cmake . //CMakeLists.txt同一级目录下
|
此时生成了Makefile
文件

生成目标文件
生成了目标文件Hello

执行可执行文件

多个源文件
目标:通过编写多个cpp
文件,使其可以进行简单的计算
c_file
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h> #include"head.h" int main(){ int a=10,b=20; printf("a:%d,b:%d\n",a,b); printf("a+b:%d+%d=%d\n",a,b,add(a,b)); printf("a-b:%d-%d=%d\n",a,b,sub(a,b)); printf("a*b:%d*%d=%d\n",a,b,mult(a,b)); printf("b/a:%d/%d=%f\n",b,α,div(b,α)); return 0; }
|
head.h
1 2 3 4 5 6 7 8 9 10 11 12 13
| #ifndef _HEAD_H #define _HEAD_H
int add(int a,int b);
int sub(int a,int b);
int mult(int a,int b);
double div(int a,int b);
#endif
|
add.cpp
1 2 3 4 5 6
| #include<stdio.h> #include "head.h" int add(int a,int b){ return a+b; }
|
sub.cpp
1 2 3 4 5 6
| #include<stdio.h> #include "head.h" int sub(int a,int b){ return a-b; }
|
mult.cpp
1 2 3 4 5 6
| #include<stdio.h> #include "head.h" int mult(int a,int b){ return a*b; }
|
div.cpp
1 2 3 4 5 6
| #include<stdio.h> #include "head.h" double div(int a,int b){ return a/b; }
|
CMakeLists.txt
1 2 3 4 5 6
| cmake_minimum_required(VERSION 3.0)
project(compute)
add_executable(compute_app main.cpp add.cpp sub.cpp mult.cpp div.cpp)
|
但是这样太过繁琐,可以使用CMakeLists.txt
中的aux_source_directory([dir][var])
代替
[dir]
:目录
[var]
:变量名
1 2 3 4 5 6 7 8
| cmake_minimum_required(VERSION 3.0)
project(compute)
aux_source_dorectory(. DIR_SRCS)
add_executable(compute_app ${DIR_SRCS})
|
文件结构

编译项目
生成Makefile
1
| cmake .//与CMakeLists.txt同一级
|
生成Makefile

生成目标文件
生成了一个目标文件

执行可执行文件

build目录
在当前项目下新建一个build
目录,将源代码和编译的目标文件区分开来
以多个源文件为例,通过创建build
目录,将源代码和编译后的文件区分开来
创建build目录

编译项目
生成Makefile文件
进入build
目录
现在的编译相关的文件都生成在了build
目录中

生成目标文件
还是在build
目录中

执行可执行文件
build
目录中

子目录下的编译
将main.cpp
和其他函数实现部分区分开,函数部分单独作为一个静态库去实现
这样便需要在main.cpp
的同级目录下编写一个CMakeLists.txt
,函数部分的目录中同时也要编写一个CMakeLists.txt
文件结构

CMakeLists.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
cmake_minimum_required(VERSION 3.0.0)
project(compute)
aux_source_directory(. DIR_SRCS)
add_subdiretory(options)
add_executable(compute_app ${DIR_SRCS})
target_link_diraries(compute_app options)
|
1 2 3 4 5 6 7 8 9
|
cmake_minimum_required(VERSION 3.0.0)
project(options)
aux_source_directory(. DIR_LIB_SRCS)
add_library(options ${DIR_LIB_SRCS})
|
编译项目
生成makefile
在项目根目录和options
目录中都要生成makefile
options
目录中一定要生成makefile
和make
完毕之后去根目录下生成makefile
文件

生成目标文件
在根目录下生成目标文件
完毕后的文件结构:

执行目标文件