CGraph学习(一):Centos7搭建CGraph环境

489 阅读2分钟

主要任务:

  在Centos7上成功运行CGraph的示例代码
  创建自己的demo程序,成功调用CGraph

源CGraph项目的地址:

  https://github.com/ChunelFeng/CGraph

第一步 升级cmake

  1. 删除自带的cmake

yum remove cmake -y && rm -f /usr/bin/cmake

  1. 从官网下载需要的cmake版本包

cmake官网:cmake.org/

cmake下载地址:cmake.org/files/

直接下载的话可以用这个:

wget https://cmake.org/files/v3.14/cmake-3.14.5.tar.gz

  1. 下载完之后解压

tar zxvf cmake-3.14.5.tar.gz

  1. 安装基本的编译工具

./configure --prefix=/usr/local/cmake

  1. 安装

make && make install

  1. 创建软连接

ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake

使配置生效 source /etc/profile

  1. 查看cmake版本

cmake -version

第二步 克隆CGraph的github代码并运行示例代码

git clone https://github.com/ChunelFeng/CGraph.git
cd CGraph
cmake . -Bbuild
cd build
make -j8
./build/T00-HelloCGraph  # 运行第一个实例程序,并且在终端输出 Hello, CGraph.

第三步 创建自己的demo程序

  1. 这里用github上给出的示例代码为例

main.cpp

 #include "MyNode.h"

using namespace CGraph;

int main() {
/* 创建一个流水线,用于设定和执行流图信息 */
GPipelinePtr pipeline = GPipelineFactory::create();
GElementPtr a, b, c, d = nullptr;

/* 注册节点,其中MyNode1和MyNode2必须为GNode的子类,否则无法通过编译 */
CStatus status = pipeline->registerGElement<MyNode1>(&a, {}, "nodeA");
status += pipeline->registerGElement<MyNode2>(&b, {a}, "nodeB");
status += pipeline->registerGElement<MyNode1>(&c, {a}, "nodeC");
status += pipeline->registerGElement<MyNode2>(&d, {b, c}, "nodeD");
if (!status.isOK()) {
    return 0;    // 对以上所有CGraph接口的返回值做判定
}

/* 执行流图框架 */
pipeline->process();
GPipelineFactory::remove(pipeline);

return 0;
}

Mynode.h

#include "../src/CGraph.h"

class MyNode1 : public CGraph::GNode {
public:
CStatus run () override {
    CStatus status;
    printf("[%s], Sleep for 1 second ...\n", this->getName().c_str());
    CGRAPH_SLEEP_SECOND(1)
    return status;
    }
};

class MyNode2 : public CGraph::GNode {
public:
CStatus run () override {
    CStatus status;
    printf("[%s], Sleep for 2 second ...\n", this->getName().c_str());
    CGRAPH_SLEEP_SECOND(2)
    return status;
    }
};

2. 在项目的根目录下建立build文件夹和CMakeLists.txt文件

在CMakeLists.txt文件中添加以下内容

cmake_minimum_required(VERSION 3.0)
project(MyProject)

# 添加可执行文件的源文件
add_executable(MyExecutable main.cpp)

# 添加头文件的搜索路径
include_directories(${CMAKE_SOURCE_DIR})

# 引用库的 CMake 文件 这个.cmake文件是CGraph提供的三方引入cmake文件
include(/CGraphDemo/CGraph/cmake/CGraph-env-include.cmake)

# 链接库到 MyExecutable 可执行文件
target_link_libraries(MyExecutable CGraph) # 生成的可执行文件名为MyExecutable

3. cd到build目录,生成makefile文件并产生可执行文件

 cmake ..  # 在build目录下生成makefile
 make      # 生成可执行文件
 ./MyExecutable # 执行可执行文件

附:VScode添加项目配置

{
"configurations": [
    {
        "name": "Linux",
        "includePath": [
            "${workspaceFolder}/**",
            "/opt/rh/devtoolset-8/root/usr/include/c++/8",
            "/opt/rh/devtoolset-8/root/usr/include/c++/8/x86_64-redhat-linux",
            "/CGraphDemo/CGraph/src"
        ],
        "defines": [],
        "compilerPath": "/opt/rh/devtoolset-8/root/usr/bin/g++",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "intelliSenseMode": "linux-gcc-x64"
    }
],
"version": 4
}