ubuntu下cmakelist组织大型项目

在windows下,利用宇宙IDE vs可以很轻松的管理大型项目,实现各模块编译为一个链接库,多个应用引用链接库,在ubuntu下则只有利用cmakelist来实现,这里以简单的helloworld为例,记录本人的项目管理cmakelist,首先给出helloworld工程项目文件树:

helloworld

├── CMakeLists.txt

├── app

│   ├── CMakeLists.txt
│   ├── hello_world1_demo
│   │   ├── CMakeLists.txt

│   │   └── hello_world1_main.cpp


├── common
│   ├── CMakeLists.txt
│   ├── hello_world_common.cpp

│   └── hello_world_common.h


└── io
    ├── CMakeLists.txt
    ├── hello_world_io.cpp

    └── hello_world_io.h

其中,helloworld为整个工程的根目录,包含三个子文件夹分别是app,common,io,以及一个CMakeLists.txt;其中io文件夹包含的是整个工程用来输入输出的所有模块,common包含整个工程共用的数据结构,算法等等,二者将分别编译成库供app中demo应用使用,这里根目录CMakeLists.txt如下:

CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
 
PROJECT(helloworld)
 
# Set up the top-level include directories
include_directories(${helloworld_SOURCE_DIR}  ${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
 
 
# Include the subdirectories
ADD_SUBDIRECTORY(app)
ADD_SUBDIRECTORY(common)
ADD_SUBDIRECTORY(io)
 

其中include_directories和link_directories用来制定第三方库的头文件和lib文件,这里以pcl为例。

然后三个ADD_SUBDIRECTORY包含了三个子模块,接下来对每个子模块内进行说明。

一、io目录下CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.10)
project(io)
 
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
 
#find_package(Qt5Core)
set(CMAKE_CXX_STANDARD 11)
 
 
 
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp")
ADD_LIBRARY(${PROJECT_NAME} ${DIR_SRCS} ${headers})
 

其中AUX_SOURCE_DIRECOTRY表示讲所有源文件路径给DIR_SRCS

FILE则是讲所有 .h以及.hpp给headers,最后ADD_LIBRARY将所有源文件以及头文件生成库io

二、common目录下CMakeLists.txt与io类似,这里不再展示。

三、app下为应用模块,这里由于可能包括多个应用文件夹,因此在app文件夹下也有一个CMakeLists.txt,由于下面只有一个应用,即hello_world1_demo,因此该txt只有一行:

ADD_SUBDIRECTORY(hello_world1_demo)

接下来的hello_world1_demo下的CMakeLists.txt为

cmake_minimum_required(VERSION 3.10)
project(hello_world1_demo)
 
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
 
#find_package(Qt5Core)
set(CMAKE_CXX_STANDARD 11)
 
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
FILE(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp")
add_executable(${PROJECT_NAME} ${DIR_SRCS} ${headers})
 
target_link_libraries (${PROJECT_NAME} io common)
这里除后两行均和前面io模块一致,不再解释,而add_executable表示生成的是可执行文件,通过当前文件夹下的源文件以及头文件,target_link_libraries则是将io以及common模块链接给该执行文件。

接下来用QT-creator打开helloworld下的CMakelists.txt,可以看到完整目录:

完整代码请查看csdn:

https://download.csdn.net/download/rjasd1128hf/10491103


                
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值