ubuntu下cmakelist组织大型项目

匿名 (未验证) 提交于 2019-12-03 00:32:02

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

helloworld

├―― CMakeLists.txt

├―― app





├―― common



└―― io


其中,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

            
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!