背景
最近在B站刷到彭老师的视频发现其中教cmake内容,看完发现cmake其实超级好用,之前一直使用IDE集成环境,虽然也可以完成代码开发,但是修改依赖什么的确实非常让人头痛,尤其是VS修改依赖,比如从debug把依赖修改成release就超级反人类,需要把debug的环境一个项目一个项目的复制到release里面。虽然是通过GUI形式的,但是修改十几个二十几个依赖也是非常变态的。上周维护一个软件版本,光修改依赖就弄了一上午,下午已经累瘫了。处于被动摸鱼。视频放下面了,这位up主的所有视频都值得认真学习。干货超级多。
【录播】现代C++中的高性能并行编程与优化(持续更新中)_哔哩哔哩_bilibili
现代 CMake 模块化项目管理
我是按照上面up主的推荐构建的项目模块,这个模块化我觉得比我之前使用的要科学一代点,我之前使用的没有命名空间,没有使用include目录下再添加项目名称这样的头文件格式,因为是使用VS开发的,所以一直是VS开发方式。
这就是彭老师推荐的目录组织方式:
下面就按照这个组织方式,我仿造一个。
这个就是我的demo
test是项目目录,下面有两个子模块,一个hello,一个mybody,main.cpp是主函数入口函数。
下面是全局cmake文件,
cmake_minimum_required(VERSION 3.12) # 解释最低使用那个版本的cmake
set(CMAKE_CXX_STANDARD 20) #设置 C++ 用那个版本
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
project(execTest LANGUAGES CXX) # 设置使用C++
set(CMAKE_BUILD_TYPE Debug) # 设置使用编译debug
file(GLOB sources CONFIGURE_DEPENDS *.cpp) # 设置当前目录的变量
add_executable(execTest ${sources}) # 生成exe
target_link_libraries(execTest PUBLIC hello) # 添加依赖模块 PUBLIC是可见的也可以添加私有的 PRIVATE
target_link_libraries(execTest PUBLIC mybody)
add_subdirectory(hello) # 添加模块
add_subdirectory(mybody)
模块cmake
file(GLOB_RECURSE sources CONFIGURE_DEPENDS *.cpp *.h)
add_library(hello SHARED ${sources}) # 生成动态库 想生产静态库改成STATIC
target_link_libraries(hello PUBLIC mybody) # 连接mybody
target_include_directories(hello PUBLIC include) # 添加头文件
file(GLOB_RECURSE sources CONFIGURE_DEPENDS *.cpp *.h)
add_library(mybody SHARED ${sources})
target_include_directories(mybody PUBLIC include)