一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
随着项目逐渐复杂,首先我们需要通过库来有效组织代码,而且这时一个人很难单兵作战,需要大家并行协同地开发代码,所以我们需要有效组织代码,也就是将整个项目模块化。
接下来我们尝试将 include 中放置的头文件放到一个 tinynn 库下,项目结构如下。
build
CMakeLists.txt
main.cpp
tinynn
---include
------tensor.h
--- tensor.cpp
在项目下创建一个目录作为一个包,这里命名为 tinynn nn 是 neural network 的缩写,然后在这个文件夹下添加了 include 文件夹用于放置头文件。
#pragma once
#include <iostream>
#ifndef TENSOR_H_FILE
#define TENSOR_H_FILE
class Tensor{
size_t _size;
public:
Tensor(size_t size);
size_t size();
};
#endif //TENSOR_H_FILE
上面代码是 tensor.h 的代码,这个代码比较简单,主要为了说明如何定义 CmakeList 文件来添加一个库,这样做的好处是如何组织代码。然后我们来看一看如何在 main 文件
#include<iostream>
#include "tensor.h"
Tensor::Tensor(size_t size){_size = size;};
size_t Tensor::size(){return _size;};
现在来简单看一下 cmake 文件
cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(hello VERSION 1.0)
add_library(tinynn STATIC tinynn/tensor.cpp)
target_include_directories(tinynn PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tinynn/include)
add_executable(hello main.cpp)
target_link_libraries(hello PUBLIC tinynn)
add_library 这个指令可以通过将目录下资源作为 libary 来添加到项目里。首先我们 libary 起一个名字,这里是 tinynn 这个名字需要是全局唯一的,然后这个 libary 的类型直行 STATIC 是一个静止库
STATIC, SHARED, 或 MODULE 可以用来指定要创建的库的类型。STATIC 库是对象文件的文件,用于连接其他目标。SHARED 是动态链接的,并在运行时加载。
target_link_libraries 在链接一个给定的目标和/或其依赖,指定要使用的库。
#pragma once
#include <iostream>
#ifndef TENSOR_H_FILE
#define TENSOR_H_FILE
class Tensor{
size_t _size;
public:
Tensor(size_t size);
size_t size();
};
#endif //TENSOR_H_FILE
cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(hello VERSION 1.0)
add_library(tinynn STATIC tinynn/tensor.cpp)
target_include_directories(tinynn PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tinynn/include)
add_executable(hello main.cpp)
target_link_libraries(hello PUBLIC tinynn)
#include<iostream>
#include "tensor.h"
using namespace std;
int main()
{
Tensor tensor = Tensor(3);
cout << tensor.size() << endl;
cout << "hello tensor" << endl;
}
我们也可以将 tinynn 独立出来,将 tinynn 作为一个独立整体,在 tinynn 文件夹下创建一个 CMakeList.txt 文件,然后添加如下内容,其中 add_library 然后用 target_include_directories 来添加 include 文件夹
add_library(tinynn STATIC tensor.cpp)
target_include_directories(tinynn PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
还需要在项目下,修改一下,通过 add_subdirectory 来添加项目下定义子库。
cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(hello VERSION 1.0)
add_subdirectory(tinynn)
add_executable(hello main.cpp)
target_link_libraries(hello PUBLIC tinynn)