回顧
在上一篇筆記里總結的時候說到,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重新打開項目。