回顾
在上一篇笔记里总结的时候说到,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重新打开项目。