前言
一个项目,无论怎么看,里面都有需要有多个package的。
近日在看基础c++入门的时候没有提到这些。。嗯,不能忍,于是看了写资料,然后实际进行操作。
这次要在一个练习用项目下面分出两个层,model模型层以及biz业务逻辑层。
建立模型层
首先请在项目根目录下面添加文件夹,叫 model:
然后在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可以看到结构为:
好了,在qt creator里面的根CMakeLists.txt注册子目录:
add_subdirectory(model)
则:
然后编译过后可以看到项目的目录里面有了model这个子目录了:
添加biz子目录且引用model
步骤差不多跟model的建立一样,不用的是要引用model。
如下:
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
必须注意!!!
如果biz引用了model,那么 add_subdirectory的时候biz就放到model的前面,这个顺序不能倒过来,否则会报错的!!
最后看看qt里面的项目结构: