c/c++项目的组织

c/c++语言项目的组织

安装c/c++编译器:

sudo apk add build-base # for alpinelinux
sudo yum -y install gcc gcc-c++ # for centos

最简单的c/c++组织方法

  • 最简单的做法:一个main()函数写到底。
  • 理性一点:把一些模块写成函数放到main()外面。

以汽车car举例:

/* file name: main.c */
#include <stdio.h>
void run(char *name){
  printf("%s is running\n", name);
} 

int main(){
  run("Rolls-Royce");
}
gcc -o main main.c
./main  # Rolls-Royce is running...

优点:快,简单。

缺点:项目大一点就麻烦了。

c/c++头文件拆分法

高级的模块化:接口(函数,类)与实现(源文件)分离。

目录结构:

./
|- car.h
|- car.c
|- main.c
  • 接口,定义在头文件里:
/* file name: car.h */
void run(char *name);
  • 实现,定义在源文件里:
/* file name: car.c */
#include <stdio.h>
#include "car.h"
void run(char *name){
  printf("%s is running...\n", name);
}  
  • 使用:
/* file name: main.c */
#include "car.h"
int main(){
  run("Rolls-Royce");
}
gcc -o main car.c main.c
./main  # Rolls-Royce is running...

用cmake组织

当写的文件有点多的时候,模块化的优势就很明显。我们需要更高效的源码组织方式。

alpinelinux安装cmake:

$sudo apk add cmake # 安装cmake和make。
  1. 极简版

目录结构:

./
|- car.h
|- car.c
|- main.c
|- CMakeLists.txt
|- build/

编写CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)

project(ProjectNameHere)

add_executable(main main.c car.c)

使用方法:

cd build  # goto build directory
cmake ..  # 使用上层的CMakeLists.txt 生成 makefile
make			# 编译
./main 		# 运行
  1. 复杂一点的结构,带有子项目(放在src/):

目录结构:

./
|- main.cpp
|- CMakeLists.txt
|- src/
|  |- CMakeLists.txt
|  |- car.cpp
|  |- car.h
|- build/

我们发现有两个CMakeLists.txt:

  • 里面那个CMakeLists.txt负责本文件夹的子项目:
aux_source_directory(. SRC_LIST) 
add_library(awesome_lib_name ${SRC_LIST})

注解:aux_source_directory(dir VAR) 查找一个目录下所有的源代码文件并将列表存储在一个变量中.

  • 最外层的那个CMakeLists.txt负责整个项目。

内容如下:

cmake_minimum_required(VERSION 3.0.0)

project(peojectNameHere)
aux_source_directory(. ROOT_DIR)
add_subdirectory(src)
add_executable(main ${ROOT_DIR})
target_link_libraries(main awesome_lib_name)

使用方法:

cd build  # goto build directory
cmake ..  # 使用上层的CMakeLists.txt 生成 makefile
make			# 编译
./main 		# 运行

总结

  • cmake与make是怎样工作的,为什么要用cmake?

    make是以makfile为基础的项目构建工具,只是Makefile的可移植性较差,跨平台意味着要重新编写。

  • 如何学习cmake?

    cmake复杂的很:见CMake 如何入门? - 0xCCCCCCCC的回答 - 知乎 我的要求不高, 能用就行。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值