利用CMake生成同一解决方案下多个项目管理文件

   有的时候,我们需要在同一解决方案下管理多个项目,如果通过VS将项目一个一个添加,这项工作将变得十分繁琐。举例来讲,拿服务端和客户端的SOCKET通信来说,服务端和客户端两部分代码应作为两个单独的项目进行编译,而为了在同一解决方案下对这两个(或多个)项目进行管理,此时便可以借助CMake来帮助我们高效完成这项任务。

                               

  如上图所示,在ServerAndClient这个项目文件夹中包含了Client和Server两个文件夹,里面存放了欲要生成项目的头文件和cpp,在这两个项目文件夹中,我们需要编写CMakeLists文件。(可以直接新建一个txt文本,然后用编辑器编辑)

  代码如下

  CMakeList.txt :

#生成的子项目名称
project (MyServer) 

#搜索对应的头文件 并存储在 HEADER_FILES变量中
file(GLOB HEADER_FILES ./*.h)
#搜索对应的CPP文件 并存储在 SRC_FILES_FILES变量中
file(GLOB_RECURSE SRC_FILES ./*.cpp)

#将之前找到的文件导入到项目中,指定生成的文件类型 (.exe)
add_executable (${PROJECT_NAME} ${HEADER_FILES} ${SRC_FILES})
project (MyClient)

file(GLOB HEADER_FILES ./*.h)
file(GLOB_RECURSE SRC_FILES ./*.cpp)

add_executable (${PROJECT_NAME} ${HEADER_FILES} ${SRC_FILES})

  以上是保存在欲要生成项目的根目录下的CMakeList文件。

  完成上述工作后,需要回到解决方案目录,即ServerAndClient文件夹下,对解决方案结构进行设计。

  代码如下:

  CMakeList:

#对CMake版本进行限制
cmake_minimum_required(VERSION 3.15)

#设置解决方案名称
project(MyClientAndServer)

#添加子目录 - 即MyClient和MyServer两个项目录
# - 参数1 是用来指定需要索引的源文件目录 
# - 参数2 用来指定项目的名称

add_subdirectory(Client MyClient)
add_subdirectory(Server MyServer)

  大功告成,在这里我们便完成了对同一解决方案下的多项目结构设置,后面只需要用CMake来一键生成.sln文件~

                

posted @ 2023-04-25 22:49  爱写代码的Max  阅读(6)  评论(0编辑  收藏  举报