cmake

概述

是个编译构建工具,相当于对makefile以及其之下的g++/gcc包装了一层。makefile语法比较难记,而cmake比较容易,适合用来编译大型项目。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
# 环境变量 PROJECT_SOURCE_DIR
cmake_minimum_required(VERSION 3.0.0)

project(distributed-system-framework)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)
# 可执行文件的输出路径,PROJECT_SOURCE_DIR为项目的根目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/utils)
include_directories(${PROJECT_SOURCE_DIR}/include/logger)
# 指明CMakelists的子目录位置
add_subdirectory(src)

尝试

首先文件名是CMakeLists.txt,严格大小写。

写一个hello world,用cmake编译。

1
2
3
4
5
6
7
8
9
10
11
12
# ~/vscode/0411_test/CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(helloworld)
# 指明项目下面的源文件都有哪些,"."指当前目录,SRC是自定义的变量名
aux_source_directory(. SRC)
# 指定二进制可执行文件的输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 附加编译时的参数
add_definitions("-g")
# 用${SRC}目录下的全部源文件生成"helloworld"可执行文件
add_executable(helloworld ${SRC})
1
2
3
4
5
6
7
8
9
// ~/vscode/0411_test/main.c
#include<stdio.h>
int main()
{
printf("\033[35mhello\n");
printf("\033[36mhello\n");
printf("\033[37mhello\n");
return 0;
}
1
2
3
4
5
6
7
8
# 当前目录处于~/vscode/0411_test
mkdir build
cd build
cmake .. # cmake寻找上级目录中CMakeLists,把构建文件输出到当前目录(build目录)
make # cmake构建到build目录下一个Makefile文件,在此目录下make即可编译项目
# 因为CMakeLists.txt指明把可执行文件生成到项目根目录下的bin目录,所以make也到bin
cd ../bin
./helloworld

重写muduo项目下的cmake

1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 2.5)
project(mymuduo)

#mymuduo 最终编译成so动态库,设置动态库的路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)#注意不是OUTPUT_DIRECTORY.这两者有区别
#设置为调试模式 以及 声明C++11语言标准
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -fPIC")#在较新的编译器后需要加-fPIC,以示生成的是动态库
#定义参与编译的源文件 起一个别名
aux_source_directory(. SRC_LIST)
#编译生成动态库mymuduo
add_library(mymuduo SHARED ${SRC_LIST})

git

内容

  1. 新建仓库
  2. git init
  3. git remote add

如何让本地指向远程仓库

  1. 创建一个目录,使用git init命令将其变为一个可以通过git管理的仓库

    1
    2
    3
    1.mkdir一个目录
    2.cd 创建的目录
    3.git init .
  2. git remote是管理远程仓库的命令,git remote add [name] [url]可以给当前目录下的git添加一个远程仓库。这里的url我填的是gitee仓库的ssh地址。

    1
    2
    git remote add mygitee git@gitee.com:mrcan/distributed-system-framework.git
    # git remote -v 可以查看远程仓库的信息

本地、远程进行同步

  1. 生成密钥

    1
    ssh-keygen -t rsa -C "邮箱"
  2. 切换到家目录下的".ssh"文件夹,发现有id_rsa和id_rsa.pub,后者是公钥,公钥给别人,连接时根据其他用户输入的公钥经过加密算法与服务器上的私钥比对。

  3. cat id_rsa.pub,把公钥内容拷贝下来,在gitee上的项目管理中找到部署公钥管理。

  4. 配置git全局用户名、邮箱

    1
    2
    git config --global user.name 'xcg'
    git config --global user.email '1933966629@qq.com'
  5. 使用git branch -r查看远程的分支有哪些,或者-a查看所有分支(包括本地分支)