codeblocks如何建同一source下cpp_[c++实战]c++零基础如何上手工程项目开发

背景

花两周时间学习golang语法并实现了线程池和thrift服务,但是实际项目代码主要以c++为主,因此需要用c++在一周之内实现相同的功能,本以为可能会在c++语法上碰壁,但更多的是工程项目如何构建编译链接上花费了较多时间,代码实现反而是个小问题。相信其他c++初学者的人想实现一个项目时也会遇上和我一样的问题,因此就总结了一下以供参考。

C++基础语法

简单把《C++Primer》前七章扫了一遍并做了mind mapping,本来以为最复杂的是C++的指针和语法问题,最终发现真正费时间的反而是细节,比如cmake的编写,CLion的配置,debugC++编程流程等等。

CLion远程开发设置

  1. 本地目录和服务器的映射Clion-Preferences-Build,Execution,Deployment-Deployment
  • Connection:填写HostPassword后测试ssh连接通过即可
  • Mappings:设置本地目录和远程服务器的映射
  • Excluded Paths:设置忽略的目录
  • Options:可以设置忽略上传的文件名,可使用通配符

2. 设置自动同步Tools-Deployment-Automatic Upload(always):勾选

3. 配置Terminal免密登录

# 本地生成密钥
ssh-keygen -t rsa
# 本地将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip_address

4. 设置ToolchainsCMake: Clion-Preferences-Build,Execution,Deployment-Toolchains

  • Toolchains:设置远程的CMakeMakeC CompilerC++ Colpiler
  • CMake:选择之前设置的Toolchains
至此,在 CLionTerminal上登录服务器,再实时同步代码,就可以实现远程开发了。

C++编程操作流程

程序从源代码到执行成功主要经过五个步骤,分别是预处理,编译,汇编,链接和执行。

  • 预处理:主要是处理以#开头的预编译指令,基本上是对源程序进行“替代”,形成没有宏定义、条件编译指令和特殊符号的输出文件
  • 编译:产生汇编代码文件(以.s结尾),主要是对源程序进行语法检查和中间代码生成,对每个源文件单独编译可以降低开发难度
  • 汇编:把汇编代码转化为目标机器指令的过程,得到的目标程序一般是以.o结尾
  • 链接:编译是对单个文件进行的,而链接是将源程序产生的多个目标文件链接为一个整体,产生一个可执行的二进制文件

项目功能

功能一:多线程并发读取多个文件归并排序输出到一个output.txt 构建线程池 生成多个随机数文件到指定目录 多线程读取多个文件 对读取到的结果归并排序并写入文件

功能二:在功能一的基础上实现一个thrift服务提供排序功能

项目工程目录

cpp_practice
├── CMakeLists.txt
├── Makefile
├── README.md
├── archive
│   ├── libgen_random_file.a
│   ├── libgencpp.a
│   └── libthreadpool.a
├── build
│   └── build.sh
├── data
├── gen_random_file
│   ├── CMakeLists.txt
│   ├── gen_random_file.cpp
│   └── gen_random_file.h
├── main
│   ├── client.cpp
│   ├── main.cpp
│   └── server.cpp
├── output
│   └── output.txt
├── runtime
│   ├── client
│   ├── cmake_generate_exe
│   └── server
├── threadpool
│   ├── CMakeLists.txt
│   ├── condition.cpp
│   ├── condition.h
│   ├── threadpool.cpp
│   └── threadpool.h
└── thriftfile
    ├── gen-cpp
    │   ├── CMakeLists.txt
    │   ├── Sorter.cpp
    │   ├── Sorter.h
    │   ├── Sorter_server.skeleton.cpp
    │   ├── sorter_constants.cpp
    │   ├── sorter_constants.h
    │   ├── sorter_types.cpp
    │   └── sorter_types.h
    └── sorter.thrift
关于c++线程池和thrift的demo,近期会总结后再放到专栏中。

g++ shell命令

只实现了功能一:

# command explain:
# * -std=c++11: use c++ 11 standard
g++ -c main/main.cpp -std=c++11
g++ -c gen_random_file/*.cpp -std=c++11
g++ -c threadpool/*.cpp -std=c++11
g++ -o sh_generate_exe condition.o threadpool.o gen_random_file.o main.o -lpthread

# delete *.o file
rm ./*.o

CMakeLists

实现了功能一和功能二:

# 设置生成文件的位置
## 可执行文件
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/runtime)
## 静态文件位置
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/archive)

cmake_minimum_required(VERSION 2.8)
project(project_1)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")

# 增加c++11支持
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

#####################project1可执行文件#####################
# 查找当前目录下所有源文件指定生成目标
add_executable(cmake_generate_exe main/main.cpp)
# 添加子目录
add_subdirectory(gen_random_file)
add_subdirectory(threadpool)
# 添加链接库
target_link_libraries(cmake_generate_exe gen_random_file)
target_link_libraries(cmake_generate_exe threadpool)
# 添加threads库
# 方法一:
# find_package(Threads)
# target_link_libraries(cmake_generate_exe ${CMAKE_THREAD_LIBS_INIT})
# 方法二:
target_link_libraries(cmake_generate_exe pthread)

#######################生成server可执行文件######################
add_executable(server main/server.cpp)
# 添加子目录
add_subdirectory(thriftfile/gen-cpp)
# 添加链接库
target_link_libraries(server gencpp)
# 添加thrift库
target_link_libraries(server -lthrift)


#######################生成client可执行文件######################
add_executable(client main/client.cpp)
# 添加链接库
target_link_libraries(client gencpp)
# 添加thrift库
target_link_libraries(client -lthrift)
# 添加链接库
target_link_libraries(client gen_random_file)
target_link_libraries(client threadpool)
target_link_libraries(client pthread)

执行方法

在文件根目录下:

cmake .
make
# 生成随机数文件
./runtime/cmake_generate_exe 
# 启动服务端
./runtime/server
# 启动客户端
./runtime/client

Reference

  • 《C++程序设计教程》(第二版)
  • 《C++Primer》(第五版)
  • https://blog.csdn.net/qq_36136497/article/details/82343561
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值