cmake学习(二)

  • Post author:
  • Post category:其他




cmake学习(二)


编译多文件


一般写代码的时候都会使用包含头文件和cpp文件的方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqmzgkWy-1638204629272)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211130004259730.png)]

# 将指定的目录添加到编译器用于搜索头文件的目录。相对路径被解释为相对于当前源目录。
# 命令原型: include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
include_directories(include) # 添加头文件目录
# 获取 src/ 目录下所有的cpp 文件 作为 SOURCE(自定义的名字),这样可以省去在生成可执行文件的时候写好多cpp 
file(GLOB SOURCE "src/*.cpp") # 源文件
#该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名
# aux_source_directory(<dir> <variable>)
aux_source_directory(/home/tjk/CLionProjects/cmake_demo/demo2/src SRC_ALL)
#为了避免在生成可执行文件的时候写好多cpp,也可以使用set 命令设置变量
set(SOURCE "src/say_hello.cpp" "main.cpp")   # 将 cpp 文件 统一赋给 SOURCE



Demo 2:

可以在 build 文件夹下执行

cmake ..

这样生成的文件都会在build 文件夹下,避免污染文件夹。

// main.cpp
#include "say_hello.h"

int main()
{
    say_hello();
    return 0;
}
//===========================================
//say_hello.h
#ifndef CMAKE_DEMO_SAY_HELLO_H
#define CMAKE_DEMO_SAY_HELLO_H
void say_hello();
#endif //CMAKE_DEMO_SAY_HELLO_H
//===========================================
//say_hello.cpp
#include "say_hello.h"
#include <iostream>
using namespace std;
void say_hello()
{
    cout<<"hello cmake"<<endl;


写法 1

# CMakeLists.txt  
# :
cmake_minimum_required(VERSION 3.16)
project(demo2)
include_directories(/home/tjk/CLionProjects/cmake_demo/demo2/include) # 包含头文件的路径
add_executable(demo2 main.cpp src/say_hello.cpp)  #生成可执行文件


写法 2

#cmake_minimum_required(VERSION 3.16)
#project(demo2)
#include_directories(/home/tjk/CLionProjects/cmake_demo/demo2/include)
#file(GLOB src_all src/*.cpp)
#add_executable(demo_2 main.cpp ${src_all})


写法 3

cmake_minimum_required(VERSION 3.16)
project(demo2)

include_directories(/home/tjk/CLionProjects/cmake_demo/demo2/include)
set(SOURCE "src/say_hello.cpp" "main.cpp")   # 将 cpp 文件 统一赋给 SOURCE
add_executable(demo2 ${SOURCE})


写法 4

cmake_minimum_required(VERSION 3.16)
project(demo2)
set(CMAKE_CXX_STANDARD 11)

include_directories(/home/tjk/CLionProjects/cmake_demo/demo2/include)
aux_source_directory(/home/tjk/CLionProjects/cmake_demo/demo2/src SRC_ALL)
add_executable(demo_2 main.cpp ${SRC_ALL})



版权声明:本文为qq_33728095原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。