c++项目之使用CMakeLists.txt进行项目内的分层结构

前言

一个项目,无论怎么看,里面都有需要有多个package的。

近日在看基础c++入门的时候没有提到这些。。嗯,不能忍,于是看了写资料,然后实际进行操作。

这次要在一个练习用项目下面分出两个层,model模型层以及biz业务逻辑层。

建立模型层

首先请在项目根目录下面添加文件夹,叫 model:

屏幕截图_298.png

然后在model文件夹下面添加CMakeLists.txt文件,里面的内容如下:

SET(SOURCE_FILES
t1.cpp
t2.cpp
)

#INCLUDE_DIRECTORIES(
#/usr/local/include
#${PROJECT_SOURCE_DIR}/utility
#${PROJECT_SOURCE_DIR}/association
#)

LINK_LIBRARIES(
/usr/local/lib
${PROJECT_SOURCE_DIR}/lib
)

ADD_EXECUTABLE(model  ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(model
#utility
)

SET_TARGET_PROPERTIES(model  PROPERTIES    #表示生成的执行文件所在路径
RUNTIME_OUTPUT_DIRECTORY  "${PROJECT_SOURCE_DIR}/bin")

解释一下:

    0.SOURCE_FILES 表示设置了一个参数,跟下面的add_executable联合使用指定生成的执行文件,

 t1.cpp以及t2.cpp是我随便建立的cpp文件---注意,指定了生成哪个执行文件就必须要有那个文件,

所以请自行建立t1,t2.

     1. ADD_EXECUTABLE()     #指定要生成的执行文件的名称model

   

     2. SET_TARGET_PROPERTIES

      设置生成的执行文件存放的路径,

      注意:


      TARGET_LINK_LIBRARIES(model   xxxxx)是用来指定 需要依赖的项目内其他同级子目录,但model独立的,所以这里不用填

    

然后子目录 model可以看到结构为:

屏幕截图_299.png

好了,在qt creator里面的根CMakeLists.txt注册子目录:

add_subdirectory(model)

则:

屏幕截图_300.png

然后编译过后可以看到项目的目录里面有了model这个子目录了:

屏幕截图_301.png

添加biz子目录且引用model

步骤差不多跟model的建立一样,不用的是要引用model。

如下:

屏幕截图_302.png

CMakeLists.txt

SET(SOURCE_FILES
biz01.cpp
biz02.cpp
)

INCLUDE_DIRECTORIES(
#/usr/local/include
#${PROJECT_SOURCE_DIR}/utility
#${PROJECT_SOURCE_DIR}/model
)

LINK_LIBRARIES(
/usr/local/lib
${PROJECT_SOURCE_DIR}/lib
)

ADD_EXECUTABLE(biz  ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(biz
model
)

SET_TARGET_PROPERTIES(biz  PROPERTIES    #表示生成的执行文件所在路径
RUNTIME_OUTPUT_DIRECTORY  "${PROJECT_SOURCE_DIR}/bin")

注册到根目录的CMakeLists.txt

屏幕截图_303.png

必须注意!!!

如果biz引用了model,那么 add_subdirectory的时候biz就放到model的前面,这个顺序不能倒过来,否则会报错的!!

最后看看qt里面的项目结构:

屏幕截图_304.png

发布了401 篇原创文章 · 获赞 256 · 访问量 271万+

猜你喜欢

转载自blog.csdn.net/cdnight/article/details/103903686