cmake简单的使用及个人的所思所感所悟

最近好多事情要忙,终于通过了科三,大三课也多了起来,还想做一个小型网络库,当作自己练手的项目(目前完成50%,差一个日志类和buffer类),今天简单的学了学cmake,分享给大家,cmake真是太好玩了,今日份快乐,哈哈哈哈!部分源自别人的博客(但基本都经过我的总结了,并没有照搬),部分源自自己的所思所感所悟,希望能帮助到您

#进入root模式 su -下载安装
yum install cmake

写一个main.cpp文件,在同目录下新建一个CMakeLists.txt文件

#include <iostream>
using namespace std;
int main(){
    cout<<"hello world"<<endl;
    return 0;
}

CMakeLists.txt写一行就可以编译通过了,建议不是强制,创建一个build文件夹,cd build进入这个文件夹然后cmake … 注意哦这是两个… 就像cd …(回到上个文件夹)一样执行上个文件夹中的CMakeLists.txt存到build文件夹中。在CMakeLists.txt目录下也可以使用 cmake . 一个点,为什么要新建一个文件夹,我个人感觉是因为工程项目中源文件很多了,cmake产生一大堆消息来参和,这个文件就乱糟糟了,所以新建文件夹方便管理。

#hello意思是生成可执行文件的名字,后面的要添加的源文件
add_executable(hello main.cpp)#根据源文件总名字来进行编译

当然还可以添加额外的信息

cmake_minimum_required(VERSION 2.5)#比如编译最低的cmake版本
project(CMAKE)#项目信息,非必需,我看别人的是介绍这个作品的一些一些信息

比如这个时候又来了一个test.cpp

//test.cpp
#include<iostream>
using std::cout;
using std::endl;
void test(){
    cout<<"hello test!"<<endl;
}

我们改造一下main.cpp和CMakeLists.txt

#include <iostream>

using namespace std;
extern void test();
int main(){
    cout<<"hello world"<<endl;
    test();
    return 0;
}

CMakeLists.txt在把test.cpp添加进去即可

#hello意思是生成可执行文件的名字,后面的要添加的源文件
add_executable(hello main.cpp test.cpp)#根据源文件总名字来进行编译

如果在此目录引链接别的文件夹下面的cpp,CMakeLists.txt也是再加一个cpp文件就行

add_executable(hello main.cpp test.cpp src/Test.cpp)

这么多的源文件叠加在一起,人都要看晕了,可不可以给这些CPP文件起个名字?当然是可以的了,我们用set,这样以后SOURES就代表这些CPP文件的总称啦

set(SOURES main.cpp test.cpp src/Test.cpp)#设置个源文件总的名称

分成多个set

set(SOURES main.cpp test.cpp)
set(SOURES ${SOURES} src/Test.cpp)
add_executable(Test ${SOURES})

最后我们再改进一下吧,加个线程进来,主要不是为了多线程,而是为了加载个动态库,我能想到最好的例子就是多线程了

#include <iostream>
#include <thread>
#include "src/Test.h"
using namespace std;
extern void test();
int main(){
    cout<<"hello world"<<endl;
    thread t1(test);
    Test t;//Test构造函数打印hello class Test
    t1.join();
    return 0;
}

CMakeLists.txt再改一下,至此cmake大致的东西就讲解到这里啦

set(SOURES main.cpp test.cpp src/Test.cpp)#设置个源文件总的名称
add_executable(Test ${SOURES})#根据源文件总名字来进行编译
target_link_libraries(Test pthread)#把链接的库添加进来,前面是可以值性文件,后面是要的链接库

在这里插入图片描述

CMAKE简直就是神器中的神器,以前没咋用到复杂的属性,这次体会到了
一个文件夹内有一个CMakeLists.txt文件,文件夹中子文件夹中还可以有CMakeLists.txt文件,举个例子,比如你在rpc文件夹下想调用 /rpc/src/include中的文件,不靠CMakeLists.txt的头文件要这么写的把
#include <./src/include/XXX.h>,我们假设rpc文件夹下的CMakeLists.txt为主CMakeLists.txt文件,在CMakeLists.txt文件下添加短短一句,让他自动去搜索src/include头文件,引用的头文件直接可以改成#include <XXX.h>,是不是很方便,有木有?
在这里插入图片描述
头文件是能搜到了,编译链接的时候找不到对应的.cpp文件阿?天啊,这要怎么办,这CMakeLists.txt怎么不管用阿,别急,在rpc主CMakeLists.txt下加上这样的一句话,加载一个src的子CMakeLists.txt文件,加上这个之后src要有一个CMakeLists.txt文件,不然主CMakeLists.txt文件会报错
在这里插入图片描述

在src下有了一个子CMakeLists.txt文件,在这里面要添加什么东西呢?可以生成一个动态链接库供外部的使用,这样rpc下的文件直接使用这个链接库即可。也解决找不到相应.cpp文件的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值