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