CMake 教程CPP开发 如何组织多个目录项目代码
我们在学习过程中,经常会运行一些小的demo 进行验证,验证语言特性,在我们学习新的一门语言时。
那么我们怎么高效的组织自己的代码呢,这里分享一个我学习网上别人优秀项目得到的一个组织多个项目
代码的CMakefie 文件编写一个经验,这里分享给大家。
1.总结项目结构
我们的项目结构如下图所示。
具体操作过程如下:
首先我们的项目时基于Clion 定义的工程,visual studio CMake 项目理应也是一样的。手动创建CMaeLists.txt 也是一样的。
创建项目 designpatterndemo 创建根目录下的 CMakeLists.txt 创建两个目录分别为:001_Interface_Segregation_Principle
002_builder
每个目录创建 CMakeLists.txt 先不管每个文件里面的内容。
2.外层CMakeLists.txt 编写
cmake_minimum_required(VERSION 3.28)
project(desingpattern C CXX)
set(CMAKE_CXX_FLAGS "-std=c++11")
add_subdirectory(001_Interface_Segregation_Principle)
add_subdirectory(002_builder)
3.内部子目录 CMakeLists.txt 编写
001目录下的 CMakeLists.txt
set_source_files_properties(
main.cpp
test.cpp
PROPERTIES COMPILE_FLAGS -std=c++17
)
add_executable(main main.cpp)
add_executable(test test.cpp)
002 目录下的 CMakeLists.txt
set_source_files_properties(
life_without_builder.cpp
builder.cpp
fluent_builder.cpp
PROPERTIES COMPILE_FLAGS -std=c++17
)
add_executable(fluent_builder fluent_builder.cpp)
add_executable(life_without_builder life_without_builder.cpp)
add_executable(builder builder.cpp)
并且每个目录下面创建对应文件名称,建议每个cpp 文件名称不一样,并且定义对应的
main 方法(此时你可以定义一个目标最简单的hello world 程序)
然后就可以编译,顺利的话,编译应该能通过
4.如何增加一个新的目录操作?
例如,我学设计模式,我将每个设计模式的代码分放到一个单独的目录里面,例如后面我可能学习 proxy 设计模式,
我要加个 003_proxy 目录,那么我怎么操作才能编译通过呢?
新建一个与001,002 同级别的目录 003_proxy ,同时修改,在外层的 CMakeLists.txt 增加
add_subdirectory(003_proxy)
即可,简单吧?这样外出就可以感知到新的目录 003_proxy 了。
5.如何在一个目录里面增加一个 cpp 可执行文件?
创建 003_proxy 目录后,我们就可以在这个目录下编写proxy 设计模式的可执行代码案例,那么如何修改 CMakeLists.txt?
能让每次编译自动生成对应的可执行文件
新的目录创建对应的 CMakeLists.txt
修改目录下的CMakeLists.txt,增加内容:
set_source_files_properties(
proxy.cpp
PROPERTIES COMPILE_FLAGS -std=c++17
)
add_executable(proxy proxy.cpp)
增加一个 proxy.cpp ,最开始内容可以是一个只有输出helloworld 的程序
例如:
#include <iostream>
using namespace std;
int main(){
cout << "hello world!" << endl;
return 0;
}
然后执行build 整个项目。debug 如果有编译错误。
操作后整个项目层级结构如下图所示:
6.总结
这个CMake项目模板,对于学习一门新的语言来说,整理代码组织代码非常有好处,这里分享给大家。