[CMake笔记] CMake向解决方案添加源文件兼头文件

 回顾

在上一篇笔记里总结的时候说到,aux_source_directory这个函数在添加源码文件时,是不会把头文件添加进去的,这里就介经一下另外一个方法,也是我一直使用的。

添加文件*.cpp与*.h

文件夹结构

CMakeFile
  |--CMakeLists.txt
  |--main.cpp
  |--stdafx.h

CMakeLists.txt

 1 # CMake 最低版本号要求
 2 cmake_minimum_required(VERSION 3.0)
 3 
 4 # 项目名称
 5 project(CMakeFile)
 6 
 7 # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
 8 FILE(GLOB SC_FILES "*.cpp" "*.h")
 9 
10 # 指定生成目标
11 add_executable(${PROJECT_NAME} ${SC_FILES})

生成解决方案

 进阶

很多时候,从第三方获取一些功能的源码文件,直接的做法可以放在我们自己的代码文件夹,像上面这样直接引入,但个人觉得这样不利于管理这些文件,特别是某些外部源码文件特别多的时候,就会觉得整个文件夹太多文件了, 很乱。我比较按功能,分放在不同的文件夹下进行管理,如下面我引入md5的相关代码(github就有):

文件夹结构

CMakeFile
  |--common
  |  |--md5
  |     |--md5.cpp
  |     |--md5.h
  |--CMakeLists.txt
  |--main.cpp
  |--stdafx.h

修改CMakeLists.txt

 1 # CMake 最低版本号要求
 2 cmake_minimum_required(VERSION 3.0)
 3 
 4 # 项目名称
 5 project(CMakeFile)
 6 
 7 # 设置md5代码文件的路径
 8 set(MD5_FILE "./common/md5/md5.cpp" "./common/md5/md5.h")
 9 
10 # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
11 FILE(GLOB SC_FILES "*.cpp" "*.h")
12 
13 # 指定生成目标
14 add_executable(${PROJECT_NAME} ${SC_FILES} ${MD5_FILE})

此处需要设置一个代码文件对应的路径,最后一定要把路径的值添加到生成目标上。

解决方案生成后

这里,就会发现一个问题,md5的代码文件是已经实现分文件夹存放管理了,但在解决方案里还不是分组的哦,我的强迫症又要犯了。

再进阶,解决方案源码分组

为了解决上面的问题,治愈我的强迫症,我再去看了看CMake的手册。原来此时只要在CMakeLists.txt添加一行脚本,调用一个source_group函数就行了:

 1 # CMake 最低版本号要求
 2 cmake_minimum_required(VERSION 3.0)
 3 
 4 # 项目名称
 5 project(CMakeFile)
 6 
 7 # 设置md5代码文件的路径
 8 set(MD5_FILE "./common/md5/md5.cpp" "./common/md5/md5.h")
 9 
10 # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
11 FILE(GLOB SC_FILES "*.cpp" "*.h")
12 
13 # 对md5的源码分组到md5组里
14 source_group(md5 FILES ${MD5_FILE})
15 
16 # 指定生成目标
17 add_executable(${PROJECT_NAME} ${SC_FILES} ${MD5_FILE})

解决方案再生成后

 

这里需要注意的是,对CMakeList.txt的其他修改在重新生成后,VS都会提示重新加载解决方案的,但调用source_group函数时,解决方案是不会自动加载的,需要关闭VS重新打开项目。

原文地址:https://www.cnblogs.com/dilex/p/11102152.html