CMake构建工程-cpp多目录

最近接触一个项目,只有一个源码目录,目录里面有好几百的源码文件。看到第一眼就有种想收拾收拾的感觉,把功能相似,业务相近的合到一个目录中去。让代码目录结构更清晰一些。
但我看是动手改的时候,复制源文件到新建目录之后,include和被include头文件的地方都要修改,非常麻烦。
百度查到的一些资料,上面写的虽然是c/c++,但实际上还是c语言,对类文件的cpp并不适用。
下面是我乱搞出的一个cmake,其中func下是c风格的cpp文件,Calc下是一个Calc的cpp类。
目录结构如下:

  CMakeLists.txt
│
├─build
├─calc
│      Calc.cpp
│      Calc.h
│      CMakeLists.txt
│
├─func
│      CMakeLists.txt
│      func1.cpp
│      func1.h
│      func2.cpp
│      func2.h
│
└─src
        CMakeLists.txt
        main.cpp

project/CMakeLists.txt

# 工程名字
PROJECT(demo)

cmake_minimum_required(VERSION  2.8)

add_subdirectory(func)
add_subdirectory(calc)
add_subdirectory(src)

\calc\CMakeLists.txt
STATIC 是表示静态库编译的意思,动态库比静态库稍复杂一些,头文件源文件第三方库关系决定是不是PUBLIC PRIVATE还是INTERFACE

add_library(calc STATIC Calc.cpp) 
target_include_directories(calc PUBLIC ./)

\src\CMakeLists.txt

add_executable(demo main.cpp)
target_link_libraries(demo calc func)

这个例子比较简单,但大致框架就是这样,用cmake比手动写makefile要方便很多。

github地址
https://github.com/New91/cpp_cmake_build

PS:重要补充,上面是通过静态库链接来实现,多级目录管理的,实际上一个目录会对应也给*.a的静态库文件。如果只是想分目录,不分模块,那直接用aux_source_directory即可。如下

#查找以下目录下的所有源文件将名称保存到 DIR_SRCS 变量
  aux_source_directory(. DIR_SRCS)
  aux_source_directory(./func DIR_SRCS)
  aux_source_directory(./calc DIR_SRCS)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值