在linux下用vscode结合CMake来编译含有多线程库的源文件时要注意的问题之2

个人认为,cmake可以在学习coding的这个过程中遇到不会的再去学习和总结记录!今天我又学到了在linux下,还有一种比较万能的通用CMakeLists.txt的写法:(用这篇博客记录一下)

(当然,如果你要在linux上引用什么thread类,还有别的库的源代码来用的时候,就肯定不止是这几条cmake代码这么简单了哈,到时候遇到了我再边用边学习即可了!)

废话不多说,直接上代码:

CMakeLists.txt:

cmake_minimum_required(VERSION X.X.X)
//指定Cmake的最低版本!在linux终端下可以用cmake --version 命令来查看你当前的cmake的版本!
project(Your_project_Name)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall") 
#指定该项目是可调试的和显示warning信息的

set(CMAKE_BUILD_TYPE Debug)
#指定调试时用debug来调试

file(GLOB SRC_FILES
    "${PROJECT_SOURCE_DIR}/src/*.h"
    "${PROJECT_SOURCE_DIR}/src/*.cpp"
    "${PROJECT_SOURCE_DIR}/src/*.c"
    "${PROJECT_SOURCE_DIR}/src/*.cc"
)
#自动帮你管理好src中的.h头文件还有.cpp 甚至还有.c .cc等的源文件!


add_executable(${CMAKE_PROJECT_NAME} main.cpp ${SRC_FILES})
#${CMAKE_PROJECT_NAME}就算自动帮你取你在第2个cmake命令下写的项目文件名字的意思
#${SRC_FILES}就是取我上面配置好了的src目录下的all源文件和头文件的意思!

demo代码:

//swap.h
#pragma once
void swap(int& a,int& b);

//swap.cpp
#include"swap.h"
void swap(int& a,int& b){
    auto t = a;
    a = b;
    b = t;
}
//main.cpp
#include<iostream>
#include"src/swap.h"
using namespace std;
int main(void){
    int a = 1,b = 2;
    cout<<"a = "<<a<<",b = "<<b<<endl;
    cout<<"after swap: "<<endl;
    swap(a,b);
    cout<<"a = "<<a<<",b = "<<b<<endl;
    return 0;
}

运行结果:

但是最通用的还是以下这种CMakeLists.txt:

用include文件夹管理.h头文件,用.src文件夹管理.cpp源文件!这种方式才是最保险和通用的!

cmake_minimum_required(VERSION 3.0.0)

project(Your_project_Name)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall") 

set(CMAKE_BUILD_TYPE Debug)

include_directories(${CMAKE_SOURCE_DIR}/include)
file(GLOB SRC_FILES
    "${PROJECT_SOURCE_DIR}/src/*.cpp"
)
add_executable(${CMAKE_PROJECT_NAME} main.cpp ${SRC_FILES})

demo codes:

//person.h
#pragma once
#include<iostream>
using namespace std;
class Person{
public:
    int m_Age;
    string m_Name;
    Person(int age,string name):m_Age(age),m_Name(name){}
    virtual void eat();

};
//person.cpp
#include"person.h"
void Person::eat(){
    cout<<"Person "<<p.m_Name<<" is eating!"<<endl;
}
//student.h
#pragma once
#include<iostream>
#include"person.h"
using namespace std;
class Student : public Person{
public:
    int m_Age;
    string m_Name;
    Student(int age,string name):Person(age,name){}
    virtual void eat();
};
//student.cpp
#include"student.h"
void Student::eat(){
    cout<<"Student "<<p.m_Name<<" is eating!"<<endl;
}
//main.cpp
#include<iostream>
#include"person.h"
#include"student.h"
using namespace std;
int main(void){
    Person* pp = new Person(22,"lyf");
    pp->eat();
    Person* ps = new Student(23,"lzf");
    ps->eat();
    Student* s = new Student(23,"lzf");
    s->eat();
    return 0;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fanfan21ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值