[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重新打開項目。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM